我有两个模型,store
和dvd
有多对多的关系
dvd
模型:
public function stores() {
return $this->belongsToMany('App\store');
}
store
模型:
public function dvds ( ) {
return $this->belongsToMany('App\dvd');
}
然后,在控制器中,当我需要从两个模型中获取数据时,我将使用如下代码:
$res_store = store::orderBy("id","desc")->get();
foreach( $res_store as $row ) {
$dvds = $row->dvds()->get();
foreach ($dvds as $dvd) {
// echo columns here
}
}
这有效,但是我的问题是,我是以正确的方式执行此操作吗?我问是因为似乎2个循环对于这个简单的关系效率低下。
答案 0 :(得分:2)
不,这不是正确的方法。
遍历$store
时,可以通过$dvd
访问关联的$store->dvds
记录;无需调用$row->dvds()->get()
,因为它正在执行与$store->dvds
相同结果的新查询。完整代码应为:
$stores = Store::with("dvds")->orderBy("id", "DESC")->get();
foreach($stores AS $store){
foreach($store->dvds AS $dvd){
... // Do something with `$dvd`
}
}
::with("dvds")
子句称为“快速加载”,可防止$store->dvds
在后台执行另一个查询。
另外,请正确命名您的模型。 PHP中的类为StudlyCase
,因此Store
和DVD
,而不是store
和dvd
。