Laravel关系:3个模型

时间:2018-06-28 14:52:43

标签: laravel eloquent

我对laravel关系有疑问。

我有3种型号:

城市-(hasMany)->诊所-(hasMany)->股票

股票-(属于)->诊所-(属于)->城市

我需要得到所有拥有库存的城市,看起来像是“库存->城市”。我可以编写sql-query:

SELECT ct.id, ct.name
FROM CfgCity as ct
RIGHT JOIN lr_clinics AS cl ON(ct.id=cl.city_id)
RIGHT JOIN lr_clinic_stocks AS st ON(cl.id=st.clinic_id)
WHERE st.deleted_at IS NULL
GROUP BY ct.id

但是我想在laravel-orm中做出决定,因为它更具可读性,并且不需要写行和表的名称。可能吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

从您的问题中可以明显看出,cityclinic有关系,clinicstock有关系,这意味着city与{{1 }}至stock。您可以使用laravel关系定义它。

  

城市模型

clinic
  

获取数据

class City extends Model {

    public function clinics(){
       return $this->hasMany(Clinic::class);
    }

    public function stocks(){
       return $this->hasManyThrough(Stock::class, Clinic::class);
    }
}

有关详细信息,您可以检查https://laravel.com/docs/5.6/eloquent-relationships#has-many-through