Могу ли я присоединиться к связанной таблице, используя загрузку Lauravel/Eloquent?

У меня возникли проблемы с пониманием того, как работает загрузка с Lauravel/Eloquent. Я хотел бы захватить всех клиентов, сделать что-то с ними и вывести их brand_name, У меня есть эти таблицы:

    Clients
+-------------------+
| Field             |
+-------------------+
| client_id         |
| client_name       |
| client_brand_id   |
+-------------------+

    Brands
+-------------------+
| Field             |
+-------------------+
| brand_id          |
| brand_name        |
+-------------------+  

В модели клиента у меня есть отношения:

public function brand()
{
    return $this->hasOne('Brand', 'client_brand_id', 'brand_id');
}

И обратное в модели брендов:

public function clients()
{
    return $this->hasMany('Client', 'brand_id', 'client_brand_id');
}

Я хочу сделать это, но это не работает:

foreach( Client::with( 'brand' )->get( array('client_id', 'client_name' ) ) as $client ){
    echo $client->brand->brand_name;
}

1 ответ

Решение

Вы должны определить свой brand отношения в вашем client модель как это:

public function brand()
{
    return $this->belongsTo('Brand', 'client_brand_id', 'brand_id');
}

Причина в том, что у вас отношения один-ко-многим, а не отношения один-к-одному между клиентами и брендами.

Кроме того, вам нужно получить полную модель для загруженных отношений, например:

foreach( Client::with( 'brand' )->get() as $client )
{
    echo $client->brand->brand_name;
}
Другие вопросы по тегам