Inserción y actualización de modelos relacionados en Eloquent
Comprar curso

16. Inserción y actualización de modelos relacionados en Eloquent

Insertar y actualizar modelos relacionados es una tarea común cuando trabajas con Eloquent. En este módulo, aprenderás cómo insertar y actualizar modelos relacionados utilizando Eloquent, lo que te permitirá gestionar tus datos de manera más eficiente.


3 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 11 meses Destacado

    Insertar y actualizar modelos relacionados es una tarea común cuando trabajas con Eloquent. En este módulo, aprenderás cómo insertar y actualizar modelos relacionados utilizando Eloquent, lo que te permitirá gestionar tus datos de manera más eficiente.

    Eloquent ofrece varias formas de insertar y actualizar modelos relacionados. Por ejemplo, puedes utilizar el método "save" para actualizar un modelo relacionado, o utilizar el método "associate" para asociar un modelo relacionado con otro modelo existente.

    También puedes utilizar el método "create" para insertar un nuevo modelo relacionado en la base de datos, o el método "sync" para sincronizar los modelos relacionados existentes con una lista de modelos proporcionados.

    Además, Eloquent te permite personalizar cómo se insertan y actualizan los modelos relacionados utilizando eventos y observadores. Esto puede ser útil cuando necesitas realizar acciones adicionales al insertar o actualizar modelos relacionados.

    En este módulo, aprenderás cómo utilizar estas funciones de Eloquent para insertar y actualizar modelos relacionados de manera eficiente. Verás ejemplos prácticos de cómo utilizar los métodos "save", "associate", "create" y "sync", así como cómo personalizar estos métodos utilizando eventos y observadores.

    En resumen, si estás buscando una forma eficiente de insertar y actualizar modelos relacionados en Eloquent, este módulo te proporcionará las herramientas necesarias para hacerlo de manera efectiva. Aprenderás cómo utilizar las funciones de Eloquent para gestionar tus datos de manera más eficiente y personalizar el proceso de inserción y actualización según tus necesidades.

  • Armando Oliveira

    Armando Oliveira hace 1 año

    Veo que existe este método  updateExistingPivot pero no entiendo en la documentación que:   “Este método acepta la clave externa del registro intermedio…”; te pregunto, acepta el id de la tabla pivote?

     Para intentar hacer algo como:

     $productión->employees()->updateExistingPivot($id, [

        'status' => false,

    ]);

     

    Ojo esto no lo he podido ver en la pc, ya que tengo problemas con ella. 

    • Victor Arana Flores hace 1 año

      Hola Armando, quizás si explicas mejor lo que quieres lograr te podre ayudar.

    • Armando Oliveira hace 1 año

      Ok. Tengo dos tablas: productions y employees mas la pivote employee_production . en production almacenos todas las producciones y en employee almaceno los empleados. La relación muchos a mucho. Muchas producciones tienen muchos empleados y viceversa. 

      En la tabla pivote contiene: employee_id, production_id, status, created_at y updated_at. 

      En status veo si el trabajador esta activo en una producción o no.

       

      El problema es que el trabajador puede iniciar su actividad a las 7:00 y se le da el alta en el sistema en la producción 1. Imagino que con created_at verifico su alta, pero puede pasar, que por instrucciones del patrono, lo cambian a otra producción. por lo que se le da de baja a las 8:00 de la producción 1  (que la fecha y hora de updated_at, como fecha de su baja,  al registrar el cambio de status de true a false) y a las 8:05 darlo de alta en la producción 2.

       

      Esto puede pasar todos los días, Y quiero, tener el histórico de los movimientos de cada trabajador y poder ver a tiempo real donde (en cual producción) esta cada trabajador 

       

      Por eso es que el trabajador con id 1 de la tabla employees, debería estar activo en una sola producción activo ('status'=1); pero tendré un historio de su producción.  

       

      como dices tú: attach agrega una fila de la tabla intermedia, detach elimina el registro. sync no creo me sirva, ya que sincroniza. 

       

      Yo creo el registro con attach con ('status')→default (true), cuando lo quiero editar a status 0, para su baja de la producción, ¿Cómo lo hago?  y luego ese mismo trabajador se le da de alta en otra producción y que no se borre ningún dato anterior, de ningún trabajador

       

    • Victor Arana Flores hace 1 año

      Puedes usar el método que mencionaste

       

      $productión->employees()->updateExistingPivot($employee_id, [
          'status' => false,
      ]);

       

      Te explico como funciona. Como tu estás accediendo a este método a tráves de la relación $productión->employees(), se va a tomar el valor del id del modelo production, y lo va almacenar digamos en una variable llamada $product_id. Luego dentro del método updateExistingPivot le tienes que pasar otro id, este id que le pases debe ser el de la relación, es decir del modelo employees.

      Como ya tienes los dos ids (product_id y employed_id) usara esa información para encontrar el registro en la tabla intermedia. Una vez que lo encuentre lo actualizará con la información que le has pasado al array, en este caso le pasará el valor de staus=false

       

      Espero que me haya dejado entender.

  • Armando Oliveira

    Armando Oliveira hace 1 año

    Víctor, soy nuevo en esto de la programación. Por lo que entiendo de tu explicación es que el método attach agrega una fila a la tabla y si deseas editar una fila, puedes usar el mismo método attach pero la pregunta es agrega otra fila con la modificación de status o se mantiene el cambio en la misma fila.

    Y entiendo que el método   sync   sincroniza y si no incluye uno, se elimina lo no incluido. 

    Yo, tengo dos tablas una employees y otra productions. También tengo una intermedia que es employee_production. Pero en esta tabla intermedia debo registrar a todos los empleados de la producción e indicar fecha del alta del empleado (created_at) y fecha de la baja del empleado (updated_at). Pero ese empleado podrá estar varias veces en esa producción, en un mismo día o en varios días. Por lo que veo no me servirá este tipo de tablas muchos a muchos, cuando no puedo usar el método updated().

    Realmente no se si me explico bien. Pero lo que no se, es si puedo editar una fila sin que me genere otra fila o me elimine datos antiguos, por el uso de la sincronización. 

    • Victor Arana Flores hace 1 año

      Hola armanado, attach agrega una fila de la tabla intermedia, detach elimina el registro de la tabla intermedia y sync mantiene sincronizado los campos que mandas con la tabla intermedia. Si mandas un nuevo campo lo agrega, caso contrario no lo vuelve a agregar, así como si no envías un campo el método considera que lo quiere eliminar de la tabla intermedia.