我想使用Eager加载从file_name
表中获取id
和products_type
列,但Laravel eager会加载一个空结果。但是,当使用belongsTo时(请参阅下面的类别关系),此技术可行。
我哪里出错了?或者,最不可能的是,hasMany关系存在一些问题吗?
控制器
private function getProducts($category){
return Products::with(array(
'types'=>function($q){
$q->first();
},//this returns empty array
'categories'=>function($q)use($category){
$q->where('name','LIKE',$category);
}))->get()->toArray();//this returns the correct result
}
这些是
中的一些关系产品型号
public function types(){
return $this->hasMany('Types','product_id')->select(array('products_type.id','products_type.file_name'));
}//doesn't work
public function categories(){
return $this->belongsTo('Categories','category_id')->select(array('categories.id','categories.name'));
}//this works
类型模型
public function products(){
return $this->belongsTo('Products','product_id');
}
答案 0 :(得分:1)
tldr; 您需要foreign key
/ primary key
参与关系,才能被选中。
您的belongsTo
有效,因为:
// Child belongsTo Parent
// so, when you select parent.id,parent.name, Eloquent can match fk-pk:
$child->parent_id == $parent->id;
hasMany
不起作用,因为:
// Parent hasMany Child
$parent->id == $child->parent_id;
// now, when you select child.id,child.name, then:
$child->parent_id; // null, therefore Eloquent can't match the keys
所以,想象一下你只选择了belongsTo
parent.name
- 那么这也行不通。
话虽这么说,你做了查询,获取了正确的行,但是不允许Eloquent完成它的工作。