提问者:小点点

雄辩的ORM不使用关系laravel获取数据


我不熟悉拉雷维尔,也不会使用雄辩的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。请帮助...


共1个答案

匿名用户

刚刚添加locality_id到选择和它的工作。实际上,雄辩的工作原理就像你有两个具有相关项的数组,你想匹配它们——如果其中一个中没有外键,那就指向另一个中的主键,那么你就不能这样做。雄辩的人也会这么做。

您必须始终选择关系的两个键(最有可能在一个模型上选择PK,在另一个模型上选择FK)。