[英]laravel hasManyThrough on a belongsTo relationship
我有以下雄辯的關系,其中
農場-> hasOne->地址如下:
/**
* \App\Address associated to the current farm.
*
* @return \App\Address
*/
public function address()
{
return $this->hasOne('\App\Address');
}
...然后地址->屬於->國家,如下所示:
public function country()
{
return $this->belongsTo('\App\Country','country_id','id');
}
...,我想使用國家/地區地址表上的country_id檢索Country模型並獲取所有關聯的農場。 我定義了一個hasManyThrough,如下所示:
/**
* Get all of the farms for the country.
*/
public function farms()
{
return $this->hasManyThrough('App\Farm', 'App\Address');
}
但它生成以下SQL:
select
`farms`.*,
`addresses`.`country_id`
from `farms`
inner join `addresses` on `addresses`.`id` = `farms`.`address_id`
where `addresses`.`country_id` = 1
SQL在場表中查找address_id。 但是服務器場不“屬於”地址。 無論如何,有沒有要解決的問題,還是我需要更改架構?
非常感謝。
為了使它起作用,您需要反轉Farm-Address關系的方向:
class Farm extends Model {
public function address() {
return $this->belongsTo(Address::class);
}
}
原因是Eloquent假設hasManyThrough關系中的每個“節點”都是下一個節點的父級,這意味着下一個節點屬於前一個節點。 在這里,如果要通過給定國家/地區的地址獲取服務器場,則服務器場需要通過address_id指向地址,而地址則需要通過country_id指向國家/地區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.