以下是我的查询
$user = User::with(['session' => function ($query) {
$query->select('id','device_id');
$query->where('api_token', '=', '123456');
}])->get();
会话:hasMany
与用户的关系。
我期待有会话的用户有api_token = 123456.相反,我在这里获得了所有用户。我知道我做错了什么。
我指的是doc。在文档中,它说我们可以为查询添加约束。但是这里$query->where('api_token', '=', '123456');
这个地方不起作用。
答案 0 :(得分:1)
您没有过滤用户,您正在过滤“会话”的热切加载结果。无论如何,急切加载对基本结果集没有任何影响。
听起来您想通过数据库中关系的“存在”来过滤用户。
User::whereHas('session', function ($q) {
$q->where('api_token', '12345');
})->get(); // ->first();
获取所有会话的用户,其中'api_token'=='12345'。
Laravel 5.5 Docs - Eloquent - Relationships - Querying Relationship Existence
答案 1 :(得分:0)
最后我得到了它。
$sessionSelect = function ($query) {
return $query->select( 'user_id', 'device_id');
};
$detailSelect = function ($query) {
return $query->select('user_id', 'dob', 'gender');
};
$sessionWhere = function ($query) use ($key) {
return $query->where('api_token', $key);
};
$users = User::with(['session' => $sessionSelect,'detail'=>$detailSelect])
->whereHas('session', $sessionWhere)
->first();