我很难理解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;
}

最佳答案

您需要像这样在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;
}

07-28 01:41
查看更多