我无法理解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;
}
答案 0 :(得分: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;
}