Eloquent 关系说明
Eloquent relation clarification
以下是我的查询
$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');
这个地方不起作用。
您不是在过滤用户,您是在过滤 'session' 的预加载结果。无论如何,预加载对基本结果集没有任何影响。
听起来您想通过数据库中关系的 'existence' 过滤用户。
User::whereHas('session', function ($q) {
$q->where('api_token', '12345');
})->get(); // ->first();
获取具有 'api_token' == '12345' 会话的所有用户。
Laravel 5.5 Docs - Eloquent - Relationships - Querying Relationship Existence
终于成功了。
$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();
以下是我的查询
$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');
这个地方不起作用。
您不是在过滤用户,您是在过滤 'session' 的预加载结果。无论如何,预加载对基本结果集没有任何影响。
听起来您想通过数据库中关系的 'existence' 过滤用户。
User::whereHas('session', function ($q) {
$q->where('api_token', '12345');
})->get(); // ->first();
获取具有 'api_token' == '12345' 会话的所有用户。
Laravel 5.5 Docs - Eloquent - Relationships - Querying Relationship Existence
终于成功了。
$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();