Laravel 5 - 在" MorphOne"上查找字段关系

时间:2015-12-24 19:58:43

标签: php laravel eloquent

我对Laravel很陌生,我现在在尝试创建查询时遇到了这个问题:

我有以下Morphable类:

\应用\用户

class User {

    public function userable()
    {
        return $this->morphTo();
    }

}

\应用\分销商

class Distributor {

    public function user()
    {
        return $this->morphOne('App\User', 'userable');
    }

}
  • 用户表包含以下字段:名称电子邮件状态 userable_type userable_id
  • 分销商表格包含以下字段: store_code location_id

通过使用Eloquent ,我需要从分销商模型启动查询,并仅选择以下字段:' name,email,store_code'。

我尝试以下操作,但laravel说 user.name 不存在:(

$queryBuilder = \App\Distributor::has('user');
$queryBuilder->select(['user.name']);
$queryBuilder->get();
  

Connection.php第651行中的QueryException:   SQLSTATE [42S22]:找不到列:1054未知列' user.name'在'字段列表' (SQL:从user中选择namedistributor其中(从user中选择计数(*)useruserable_id = {{1 } {。{1}}和distributorid = App \ Distributor和useruserable_type为空)> = 1)

我能够实现强制连接关系的目标,但这似乎是错误的,我认为Eloquent能够自己找到关系,因为模型中指定了变形关系。

仅供记录,这很好用:

user

此外,由于它是一对一的关系,有时候我需要使用其中一个用户列来排序结果

但我需要另一种方法来做到这一点而不强迫连接,这是第一个例子。

1 个答案:

答案 0 :(得分:0)

docs

中阅读with()函数
$queryBuilder->select('id','store_code');
$queryBuilder = \App\Distributor::with(['user'=>function($query){
  $query->select('id','name','email')
}]);
$queryBuilder->has('user');
$queryBuilder->get();