2016-07-26 89 views
1

我试图从数据库中获得某种结果集合,仍然利用了雄辩。如何更深入地使用Laravel 5.2中的雄辩hasMany?

我有一个名为as_inspections桌,叫as_green_areas和一张桌子称为as_assets

每次检查都有一个绿色区域,每个绿地面积有许多资产。

当我取检查我做这样的事:

检验模型

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Inspection extends Model 
{ 
    protected $table = 'as_inspections'; 

    public function greenAreas() 
    { 
     return $this->hasOne('App\GreenArea', 'id'); 
    } 
} 

GreenArea模型

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class GreenArea extends Model 
{ 
    protected $table = 'as_green_areas'; 
} 

路线

Route::get('inspections', ['middleware' => 'cors', function() 
{ 
    $isp = new \App\Inspection(); 
    return $isp 
     ->with('greenAreas') 
     ->get(); 
}]); 

现在,我想d Ø是这样的:

Route::get('inspections', ['middleware' => 'cors', function() 
    { 
     $isp = new \App\Inspection(); 
     return $isp 
      ->with('greenAreas') 
      ->with('assets') // where each green area has its own set of assets 
      ->get(); 
    }]); 

写在评论,我想获得的全部资产为绿化面积,然后将所有为检查的绿地。

我该怎么做? 谢谢!

回答

2

杉杉将这样的定义,请务必立即更换与正确的在你的关系表中功能的外键,

namespace App; //model class for inspection 

use Illuminate\Database\Eloquent\Model; 

class Inspection extends Model 
{ 
    protected $table = 'as_inspections'; 

    public function greenArea() 
    { 
     return $this->belongsTo('App\GreenArea', 'greenareaid','id'); 
    } 
} 


namespace App; //model for green area 

use Illuminate\Database\Eloquent\Model; 

class GreenArea extends Model 
{ 
    protected $table = 'as_green_areas'; 

    public function inspection() 
    { 
     return $this->hasOne('App\Inspection', 'greenareaid','id'); 
    } 

    public function assets() 
    { 
     return $this->hasMany('App\Asset', 'greenareaid','id'); 
    } 
} 

namespace App; //model for asset 

use Illuminate\Database\Eloquent\Model; 

class Asset extends Model 
{ 
    protected $table = 'as_assets'; 
    public function greenArea() 
    { 
     return $this->belongsTo('App\GreenArea', 'greenareaid','id'); 
    } 

} 

,那么你可以使用预先加载雄辩容易使相关车型如示例波纹管..你检查合格模型的主键查找方法,再抓绿化面积及相关资产为它

Inspection:find(1)->with('greenArea.assets'); 
+0

嗨!感谢这个答案!我目前正试图实施它。只是一个问题。是greenareaid,检查外键?在as_inspections表中,我有一个名为green_area_fk的fk,我应该用green_area_fk替换检验ID还是将检验表的主键保留为ID?我很困惑这些方法的可选参数... – Caius

+0

它的工作!谢谢!如果你有时间链接我一些资源,以更多地了解像hasMany等雄辩方法的可选参数,那将是惊人的! – Caius

+1

看到我上面更新的代码,我已经简单地改变了belongsTo方法,在你的情况下你可以像它一样,你有一个检查绿色区域,因为你在检查表中保留外键,所以一定要注意belongsTo关系是定义的你的外键所在的地方... 最好的教程是Laravel.com,文档,我一直指它已经超过1年,并完成了一个ERP系统...... –

0
Inspection::find($id)->greenAreas()->assets()->all(); 

这将获取greenAreas的所有资产,由Inspection $ id检查。

我不确定您要查找哪个查询。所有的模型类和关系的

+0

这是一个AJAX请求,移动应用程序需要向API提供一组关于该插件的信息pections。并没有通过任何ID。所以我需要得到所有的检查,并且每次检查green_areas相关的信息,以及每个green_area所有的资产。我不知道如何google:/ – Caius

+0

'Inspection :: all() - > with('greenArea.assets');'Should work – Vuldo

+1

Inspection :: find($ id) - > greenAreas() - >第一个(),这是不正确的,当关系被定义为hasone时,你不需要调用first(), –