我对Laravel很陌生,我现在在尝试创建查询时遇到了这个问题:
我有以下Morphable类:
\应用\用户
class User {
public function userable()
{
return $this->morphTo();
}
}
\应用\分销商
class Distributor {
public function user()
{
return $this->morphOne('App\User', 'userable');
}
}
通过使用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
中选择name
。distributor
其中(从user
中选择计数(*)user
。userable_id
= {{1 } {。{1}}和distributor
。id
= App \ Distributor和user
。userable_type
为空)> = 1)
我能够实现强制连接关系的目标,但这似乎是错误的,我认为Eloquent能够自己找到关系,因为模型中指定了变形关系。
仅供记录,这很好用:
user
此外,由于它是一对一的关系,有时候我需要使用其中一个用户列来排序结果
但我需要另一种方法来做到这一点而不强迫连接,这是第一个例子。
答案 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();