[英]Setting up a kind of BelongsToThrough relationship in Laravel
這是我目前的情況:
我想建立從任務到帳戶的“belongsToThrough”關系。
我的第一個解決方案是在任務 model 中定義一個關系,如下所示:
public function account(): BelongsTo
{
return $this->owner->account();
}
有了它,我可以調用$task->account
並輕松檢索任務的帳戶。 問題是這不適用於load
/ with
,這反過來又會導致問題,因為我無法refresh()
已加載帳戶的任務(因為刷新使用負載)。 該錯誤只是說明Trying to call account() on null
這確實是意料之中的。
我的第二個解決方案是將關系方法更改為:
public function account(): BelongsTo
{
return $this->owner()->first()->account();
}
有了這個,我也可以簡單地調用$task->account
並檢索 model,加載時它不起作用(返回 null),但也不會拋出任何錯誤。 我不需要加載這種關系,只是碰巧有時我需要刷新模型並且讓加載方法拋出錯誤是不行的。
總之
我正在尋找的是一種 BelongsToThrough,因為任務將通過所有者(用戶)屬於帳戶。 有沒有一種方法可以同時使用$task->account
和$task->load('account')
。 在你告訴我我可以使用owner.account
加載它之前,我知道,但是refresh()
會使用load('account')
自動完成,所以我需要它像那樣工作,而不是使用點符號。
要使其與load()
一起使用,您需要在owner
model 上定義account
關系,如果您還沒有這樣做的話。 像這樣:
public function account() :BelongsTo
{
return $this->belongsTo(AccountsTable);
}
然后在您的任務 model 上調用load()
時使用點符號,例如:
$task->load('owner.account');
您可以使用急切加載來做到這一點
public function account()
{
return $this->belongsTo('App\ParentModel', 'foreignkey', 'localkey');
}
之后,您可以輕松地使用 load/with 獲取關系數據。
謝謝,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.