我不熟悉拉雷维尔,也不会使用雄辩的ORM。现在的问题是,我正在尝试使用与with()函数的关系获取记录。现在的问题是,Elount生成并应用正确的查询,但不返回任何结果。但是如果我在mysql上测试生成的相同查询,那么它就可以正常工作。
以下是其中涉及的两个表:
属性: id, name,locality_id
地区: id,名称,类型,相邻
现在,上述表之间的关系是一对多关系。
物业模型:
protected $table = 'properties';
protected $guarded = array('id');
public function localityAreaAndCity() {
return $this->belongsTo('Locality','locality_id')
->leftjoin('localities as ls', function($join)
{
$join->on('localities.id', '=', 'ls.adjoining')
->where('localities.type', '=','area');
});
->select(array('localities.name as localityPrimaryName',
'localities.type as localityPrimaryType',
'ls.name as localitySecondaryName',
'ls.type as localitySecondaryType'));
}
位置模型:
public $timestamps = false;
protected $table = 'localities';
protected $guarded = array('id');
public function properties()
{
return $this->hasMany('Property');
}
雄辩的质疑:
$properties = Property::with('localityAreaAndCity')->get();
DB::getQueryLog()结果:
select `localities`.`name` as `localityPrimaryName`, `localities`.`type` as `localityPrimaryType`, `ls`.`name` as `localitySecondaryName`, `ls`.`type` as `localitySecondaryType` from `localities` left join `localities` as `ls` on `localities`.`id` = `ls`.`adjoining` and `localities`.`type` = ? where `localities`.`id` in (?, ?, ?, ?, ?)
知道如果我在mysql中使用上面提到的查询,那么它会返回数据,但使用雄辩的ORM它会返回NULL。请帮助...
刚刚添加locality_id到选择和它的工作。实际上,雄辩的工作原理就像你有两个具有相关项的数组,你想匹配它们——如果其中一个中没有外键,那就指向另一个中的主键,那么你就不能这样做。雄辩的人也会这么做。
您必须始终选择关系的两个键(最有可能在一个模型上选择PK,在另一个模型上选择FK)。