簡體   English   中英

laravel hassManyThrough on屬於歸屬關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM