0

estoy utilizando LiveWire Datatables donde quiero obtener el campo "name" de una relación

esta es la tabla en cuestión

    public function builder()
{
    return LocationGroupLocation::where('group_id', $this->params)->with('location');
}

public function columns()
{
    return [
        Column::callback(['group_id'], function ($groupId){
            $locationGroupLocation = LocationGroupLocation::where('group_id', $groupId)->with('location')->get();
            return $locationGroupLocation->location->name;
        })->label('Locations'),
    ];
}

esto me está retornando un error de

Exception
Property [location] does not exist on this collection instance.

sin embargo al hacer un dd($locationGroupLocation); sí aparece la relación

#items: array:3 [▼
    0 => App\Models\LocationGroupLocation {#1786 ▼
 #relations: array:1 [▼
        "location" => App\Models\Location {#1796 ▼
          #original: array:28 [▼
            "id" => 1
            "name" => "test location"
            "language_code" => "ja"

No veo dónde podría estar mal si al hasta ese momento aparece todo bien

Modelo LocationGroupLocation

    public function locationGroup()
{
    return $this->belongsTo(LocationGroup::class, 'group_id');
}

public function location()
{
    return $this->belongsTo(Location::class, 'location_id')->withTrashed();
}

Modelo Location

   use SoftDeletes;         
   protected $fillable = [
    'store_code', 'name', 'account_id', 'storefront_address', 'regular_hours', 'special_hours',
    'lat_lng', 'website_uri', 'categories', 'language_code', 'title', 'phone_numbers', 'service_area',
    'labels', 'ad_words_location_extension', 'open_info', 'metadata', 'profile', 'relationship_data',
    'more_hours', 'service_items', 'average_rating', 'total_review_count', 'total_media_item_count'
];

public function locationGroupLocation()
{
    return $this->hasMany(LocationGroupLocation::class, 'location_id');
}

No logro identificar dónde podría estar el problema

3
  • 2
    El problema del error está en la función columns(), pues haces una consulta $locationGroupLocation = LocationGroupLocation::where('group_id', $groupId)->with('location')->get(); que te devolverá una colección, y luego intentas acceder a la propiedad de uno de los elementos directamente sobre la colección $locationGroupLocation->location->name; Commented el 2 dic. 2021 a las 17:11
  • cierto, ahora he intentado utilizar una columna "location_id" y utilizar eso para obtener los datos usando la clase Location, pero me retorna valores vacíos
    – Andre
    Commented el 3 dic. 2021 a las 15:10
  • 1
    No conozco ese paquete, y no sé si entiendo lo que estás intentando hacer, pero dándole una mirada rápida al readme, creo que para mostrar la relación bastaría con Column::name('location.name')->label('Locations'),, en vez de hacer otra consulta. Aquí el ejemplo oficial de una tabla con relaciones Commented el 3 dic. 2021 a las 15:15

0

Examina otras preguntas con la etiqueta o formula tu propia pregunta.