Relaciones
Comprar curso

11. Relaciones

En este tema aprenderás a trabajar con columnas de relaciones utilizando Laravel Livewire Tables. Te mostraremos cómo definir y configurar tus columnas de relaciones para que funcionen correctamente.


4 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    Laravel Livewire Tables admite relaciones hasOne, belongsTo y morphOne fuera de la caja para mostrar, ordenar y buscar. El componente unirá automáticamente las tablas necesarias para que puedas llamar a estas relaciones con facilidad.

    Para llamar a estas relaciones, simplemente usa la cadena de notación de puntos de la relación como el nombre del campo en tu columna. Por ejemplo, si tienes un modelo User que tiene una relación hasOne con el modelo Address, puedes llamar a la columna "Address" de la siguiente manera:

    protected $model = User::class;
    
    // ...
    
    public function columns(): array {
        return [
            // Looks for the address column on the address relationship of User.
            // $user->address->address
            Column::make('Address', 'address.address'),
            
            // ...
        ];
    }

    De manera similar, si tu modelo Address tiene una relación hasOne con el modelo Group, y el modelo Group tiene una relación belongsTo con el modelo City, puedes llamar a las columnas "Address Group" y "Group City" de la siguiente manera:

    protected $model = User::class;
    
    // ...
    
    public function columns(): array {
        return [
            // Looks for $user->address->group->name
            Column::make('Address Group', 'address.group.name'),
            
            // Looks for $user->address->group->city->name
            Column::make('Group City', 'address.group.city.name'),
            
            // ...
        ];
    }

    De esta manera, puedes mostrar y ordenar fácilmente los datos de tus relaciones en tus tablas de Laravel Livewire. Espero que esta información te haya sido útil. ¡No dudes en preguntarme si necesitas más ayuda!

  • Antonio Lanas

    Antonio Lanas hace 4 meses

    Es posible tener una tabla de usuarios en la que aparezca una columna con los roles de cada usuario (usando spatie/laravel and permission)?

    la columna entonces como sería? Column::make("Roles", "user.roles[]"), obviamente esto no funciona. No sé si se puede hacer, creo que no

    • Antonio Lanas hace 4 meses

      Column::make("Roles")

      ->label(fn($row) => $row->roles->pluck('name')->join(', ')),

       

      creo que seria algo asi :)

    • Victor Arana Flores hace 4 meses

      Hola antonio, si se puede, te oriendo masomenos como lo harías.

      En tu tabla recupera el modelo User a traves del metodo builder y cargas la relación con Role.

      public function builder(): Builder
      {
          return User::query()
              ->with('roles');

      Ahora para mostrar la columna haz esto

      Column::make('Role')
                      ->label(
                          function ($row) {
                              // return $row->roles
                          }
                      ),

      Cuando usas label, no va intentar encontrar la columna Role, sino que va usar la información ya cargada para hacer algo personalizado.

      Pdta:

      En el caso de que no estes mostrando el campo id en tu tabla, y al necesitarse esa campo para recuperar los roles, tendrías que agregarlo a la consulta de esta manera

      public function configure(): void
          {
              $this->setPrimaryKey('id');
              $this->setAdditionalSelects(['users.id']);
          }
    • Antonio Lanas hace 4 meses

      Muchas gracias amigo, voy a probarlo

  • Rodrigo Rojas Ruiz

    Rodrigo Rojas Ruiz hace 11 meses

    Hola Victor, este paquete te permite usar las funciones del modelo, como por ejemplo una que es muy usada para agrupar el nombre y apellidos.


     public function getFullName() {

        return $this->nombres.' '. $this->apellido_paterno.' '. $this->apellido_materno;

      }

     

    saludos.

     

  • Diego Mendoza

    Diego Mendoza hace 1 año

    Buenas tardes, excelente curso. Lo estoy haciendo paso a paso junto a los videos, pero me surgió una curiosidad, se puede concatenar campos?, por ejemplo tengo una tabla con el campo NOMBRES y otro campo APELLIDOS. ¿ Se los podría concatenar en una sola columna de la tabla tipo APELLIDOS Y NOMBRES?. muchas gracias.

    • Victor Arana Flores hace 1 año

      Hola Diego, claro.

      En el video 19, cuando se hable de formatting, podrás ver una forma de hacerlo.