Laravel关系:3个模型

Laravel关系:3个模型,laravel,eloquent,Laravel,Eloquent,我对拉威尔的关系有问题 我有3种型号: 城市-(hasMany)->诊所-(hasMany)->股票 股票-(belongsTo)->诊所-(belongsTo)->城市 我需要得到所有有股票的城市,看起来像«股票->城市»。我可以编写sql查询: 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 O

我对拉威尔的关系有问题

我有3种型号:

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

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

我需要得到所有有股票的城市,看起来像«股票->城市»。我可以编写sql查询:

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中进行决策,因为它更具可读性,并且我不需要编写行和表的名称。可能吗?
谢谢。

从您的问题可以清楚地看出,
城市
诊所
有关,
诊所
股票
有关,这意味着
城市
通过
诊所
股票
有关。您可以使用laravel关系来定义它

城市模型

获取数据


有关详细信息,您可以从您的问题中查看,很明显
城市
诊所
相关,
诊所
股票
相关,这意味着
城市
通过
诊所
股票
相关。您可以使用laravel关系来定义它

城市模型

获取数据


有关详细信息,请查看

您需要更好地阅读文档。您需要更好地阅读文档。
class City extends Model {

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

    public function stocks(){
       return $this->hasManyThrough(Stock::class, Clinic::class);
    }
}
$cities = City::whereHas('stocks')->get();