我在急切的装载上遇到了麻烦。 我们说我有会员模型,TrainingCategory,TrainingCategoryResult和Registration
会员模特:
public function registration() {
return $this->hasMany('Registration', 'member_id');
}
public function trainingResults(){
return $this->hasMany('trainingResult', 'member_id');
}
public function trainingCategoryResults() {
return $this->hasMany('TrainingCategoryResult', 'member_id');
}
TrainingCategory模型:
public function trainings() {
return $this->hasMany('Training', 'id');
}
public function trainingCategoryResults() {
return $this->hasMany('trainingCategoryResult', 'category_id');
}
TraningCategoryResult模型:
public function category() {
return $this->belongsTo('TrainingCategory', 'id');
}
public function member() {
return $this->belongsTo('Member', 'id');
}
注册模式:
public function course() {
return $this->belongsTo('Course', 'course_id');
}
public function member() {
return $this->belongsTo('Member', 'id');
}
我正在尝试加载所有注册信息及其相关信息,包括TraningCategoryResult信息,但我不知道如何获得需要两个外键(category_id和member_id)的TraningCategoryResult,有没有办法做到这一点? / p>
这是我的代码atm:
$members= Member::where(function($query) use ($id, $site) {
$query
->where('id', '=', $id)
->where('site', '=', $site);
});
$members= $members
->with('registration.course',
'registration.course.traningCategories',
->get(['member.id']);
谢谢。
答案 0 :(得分:0)
这将无法使用Member :: with('categoryResult') - > with('registration') - > get()
您可以在会员模型中建立新关系
public function categoryResult()
{
return $this->belongsTo('Category')->with('Registration');
}
//然后调用
会员::与( 'categoryResult') - >得到();
答案 1 :(得分:0)
您可以使用一些选项来实现这一目标:
选项1 :创建变量关系
在会员模型中更改您的关系
public function trainingCategoryResults($category_id = null) {
if(empty($category_id))
return $this->hasMany('TrainingCategoryResult', 'member_id');
else
return $this->hasMany('TrainingCategoryResult', 'member_id')
->where('category_id', $category_id);
}
上面的代码可能有局限性,并没有利用许多laravel功能,但它可以工作。
选项2:从关系访问
您可以按原样保存所有内容,并按以下方式加载:
$members= Member::where(function($query) use ($id, $site) {
$query
->where('id', '=', $id)
->where('site', '=', $site);
})
->where('id', $member_id) // set the id of the memeber
->with(array(
'traningCategoryResults' => function($q)use($category_id){
$q->where('category_id', $category_id); // This makes sure you get only desired results
}
))
通过这种方式,假设您知道$ category_id
,那么您将只拥有所需的内容