我不能让一些雄辩的关系奏效

时间:2016-02-23 05:39:48

标签: laravel database-design model eloquent database-relations

首先让我解释一下我的表格之间的关系,然后我将解释我不能做的事情。

所以,我有一个名为“公司”的实体,它有许多“收入”,其中有很多“IncomeUnitSale”,其中有一个“IncomeUnitSaleUnitPrice”

Company 1->* Income 1->* IncomeUnitSale 1->1 IncomeUnitSaleUnitPrice

型号:

公司模式

public function Income(){
    return $this->hasMany('App\Income');
}

收入模型(表格有“company_id”)

public function Company(){
    return $this->belongsTo('App\Company');
}

public function IncomeUnitSale(){
    return $this->hasMany('App\IncomeUnitSale');
}

IncomeUnitSale模型(表格有“income_id”)

public function Income(){
    return $this->belongsTo('App\Income');
}

public function IncomeUnitSaleUnitPrice(){
    return $this->hasOne('App\IncomeUnitSaleUnitPrice');
}

IncomeUnitSaleUnitPrice(表格有“income_unit_sale_id”)

public function IncomeUnitSale(){
    return $this->belongsTo('App\IncomeUnitSale');
}

我要做的是以下内容:

$company = Company::where("id","=",1)->first();
$company->Income->IncomeUnitSale->IncomeUnitSaleUnitPrice

但是它说它为null,它一直工作到$company->Income->IncomeUnitSale,但之后不会显示任何关系。

有人可以告诉我我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

hasMany关系将始终返回一个Eloquent Collection对象。如果没有相关记录,它将只是一个空CollectionhasOnebelongsTo关系将始终返回相关模型,如果没有相关模型,则返回null

由于您的某些关系是hasMany,因此您必须迭代返回的Collection以便能够更进一步。因此,您必须:{/ p>而不是$company->Income->IncomeUnitSale->IncomeUnitSaleUnitPrice

foreach($company->Income as $income) {
    foreach($income->IncomeUnitSale as $sale) {
        echo $sale->IncomeUnitSaleUnitPrice->price;
    }
}