我对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中做出决定,因为它更具可读性,并且不需要写行和表的名称。可能吗? 谢谢。
答案 0 :(得分:2)
从您的问题中可以明显看出,city
与clinic
有关系,clinic
与stock
有关系,这意味着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