Php 从多对多关系中获取数据
我有两种型号,Php 从多对多关系中获取数据,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我有两种型号,store和dvd,具有多对多关系 dvd型号: public function stores() { return $this->belongsToMany('App\store'); } public function dvds ( ) { return $this->belongsToMany('App\dvd'); } 商店型号: public function stores() {
store
和dvd
,具有多对多关系
dvd
型号:
public function stores() {
return $this->belongsToMany('App\store');
}
public function dvds ( ) {
return $this->belongsToMany('App\dvd');
}
商店
型号:
public function stores() {
return $this->belongsToMany('App\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
}
}
这是可行的,但我的问题是,我这样做是正确的吗?我这样问是因为这个简单关系的两个循环在某种程度上是无效的。不,这不是正确的方法 在
$store
上循环时,您可以通过$store->dvd
访问相关的$dvd
记录;无需调用$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