Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多对多关系中获取数据_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

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