De fondo

Estoy creando una base de datos que giran alrededor de las alergias a los alimentos y yo tenemos una relación de muchos a muchos entre los alimentos y las alergias. También hay un pivote valor llamado severity que tiene un número de serie que representa la severidad de la alergia para que el elemento de la comida.

Este enlace de la tabla se ve como este;

food_id|allergy_id|severity
------- | ---------- | --------
     1 |        1 |      3
     1 |        4 |      1
     2 |        2 |      1

El problema

Al intentar actualizar la tabla de enlaces con Elocuente (donde $allergy_ids es una matriz)

$food->allergies()->attach($allergy_ids);

Cómo se podría ir sobre la adición de varios valores de esta tabla dinámica a la vez junto con el pivote valores?

Puedo agregar todos los allergy_id‘s para un alimento en particular en uno ir con la línea anterior, pero ¿cómo puedo añadir también en el severity columna al mismo tiempo con una variedad de diferentes valores de gravedad? Tal vez algo como

$food->allergies()->attach($allergy_ids, $severity_ids);

Edit: No podría ser de entre 0-20 alergia a un determinado alimento, y una clasificación de gravedad de 0 a 4 para cada uno de alergia, si esto ayuda a todos.

OriginalEl autor Duncan Ogle | 2014-04-22

4 Comentarios

  1. 23

    Puede.

    A partir de este ejemplo en google Docs (4.2, 5.0):

    $user->roles()->sync(array(1 => array('expires' => true)));

    Codificado versión para las dos primeras filas:

    $food = Food::find(1);
    $food->allergies()->sync([1 => ['severity' => 3], 4 => ['severity' => 1]]);

    Dinámicamente, con sus matrices $allergy_ids y $gravedad en un compatibles estado (tamaño y tipo), deberá preparar su sincronizar los datos de antes. Algo así como:

    $sync_data = [];
    for($i = 0; $i < count($allergy_ids); $i++))
        $sync_data[$allergy_ids[$i]] = ['severity' => $severities[$i]];
    
    $food->allergies()->sync($sync_data);
    Gran resolviste mi problema @Nuno Rafael Figueiredo esto funcionó para mí
    Me alegro, pero ¿no deberías upvote mi respuesta?
    Obras para attach así. NOTA!!! El uso de la sincronización de eliminar todos los no existentes en $sync_data y agregar los no existentes en la tabla. Es el equivalente de detach() y, a continuación,attach(). Nota exactamente igual, pero de cerca, ya existente registros de no ser separada de la primera.
    Aceptar esto como la respuesta debido a la más upvotes, y parece ser más relevante que la vieja respuesta de hace 2 años.

    OriginalEl autor Nuno Rafael Figueiredo

  2. 9

    Que no se puede hacer como tú’, como así le sugiero un bucle simple:

    foreach ($allergy_ids as $key => $id)
    {
      $food->allergies()->attach($id, array_get($severity_ids, $key));
      //should you need a sensible default pass it as a 3rd parameter to the array_get()
    }

    solución
    Sin embargo, si desea conectar múltiples alergias con un solo nivel de gravedad/id, entonces usted podría hacer esto:

    $food->allergies()->attach($allergy_ids, array('severity' => $singleSeverityValue));
    foreach ($allergy_ids as $clave => $id) { $alimentos->alergias()->adjuntar([$id], [‘gravedad’ => array_get($severity_ids, $clave)]); } Esta es la versión actualizada del código que he utilizado para conseguir que funcione. Resulta que el attach método espera matriz a la que se le pasa. Gracias!
    Quieres decir que no funciona para usted, sin casting $id a una matriz? No debería ser un problema como método de adjuntar convierte en la matriz de todos modos.
    Que hizo el truco! =>, mi problema era que tenía una coma en su lugar 😛

    OriginalEl autor Jarek Tkaczyk

  3. 0

    Más fácil, de hecho es conectar con el extra de datos, así:

    $retailer->paymentmethods()->attach($paymentmethod, array('currency' => $paymentmethod->currency));

    cambiar los valores para la alergia a los alimentos gravedad, pero usted consigue la pista… 🙂

    OriginalEl autor My Brain

  4. 0

    Para asignar usuario a la función específica, ello a continuación.

    $user = App\User::find(1);
    $user->roles()->attach($roleId);

    Espero que esto ayude

    OriginalEl autor Jesus Erwin Suarez

Dejar respuesta

Please enter your comment!
Please enter your name here