0

Позвольте мне сначала объяснить отношения моего стола, а затем я объясню, что я не могу сделать.Я не могу сделать некоторые отношения «Жестокие отношения» к работе

Итак, у меня есть объект под названием "Компания" она имеет много "Доходы", который имеет много "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, но после этого не должно быть никакого отношения.

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

Спасибо!

ответ

0

hasMany отношения всегда будут возвращать Зловещий объект Collection. Если нет связанных записей, это будет просто пустой Collection. hasOne и belongsTo отношения всегда будут возвращать либо связанную модель, либо null, если нет соответствующей модели.

Потому что некоторые из ваших отношений - hasMany, вам нужно итерации возвращенного Collection, чтобы иметь возможность идти дальше. Итак, вместо $company->Income->IncomeUnitSale->IncomeUnitSaleUnitPrice вы должны:

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

Спасибо! Честно говоря, было бы лучше «$ company-> Income-> IncomeUnitSale-> IncomeUnitSaleUnitPrice'. Но это сработало и хорошо, спасибо! – mkmnstr

+1

@mkmnstr Если ваша компания имеет многократные доходы, и каждый доход имеет несколько продажных цен на акции, в какой записи вы ожидаете возвращения '$ company-> Income-> IncomeUnitSale-> IncomeUnitSaleUnitPrice'? – patricus

+0

Совершенно верно. Я не знаю, что я думал xD Спасибо! – mkmnstr

Смежные вопросы