我可以使用Laravel / Eloquent eager loading加入相关表格吗?

时间:2014-08-08 07:52:42

标签: php mysql laravel 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 个答案:

答案 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;
}