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
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;
Column::name('location.name')->label('Locations'),
, en vez de hacer otra consulta. Aquí el ejemplo oficial de una tabla con relaciones