Php 雄辩的关系澄清
以下是我的疑问Php 雄辩的关系澄清,php,laravel-5,laravel-5.5,laravel-eloquent,Php,Laravel 5,Laravel 5.5,Laravel Eloquent,以下是我的疑问 $user = User::with(['session' => function ($query) { $query->select('id','device_id'); $query->where('api_token', '=', '123456'); }])->get(); 会话:与用户有很多关系 我希望有一个会话api_token=123456的用户。相反,我在这里得到了全部
$user = User::with(['session' => function ($query) {
$query->select('id','device_id');
$query->where('api_token', '=', '123456');
}])->get();
会话:与用户有很多关系
我希望有一个会话api_token=123456的用户。相反,我在这里得到了全部用户。我知道我做错了什么
我指的是这个。在文档中,它表示我们可以向查询添加约束。但是这里是$query->where'api_-token','=','123456';这不起作用。您不是在筛选用户,而是在筛选急切加载“会话”的结果。即时加载不会对中的基本结果集产生任何影响 听起来您想根据数据库中关系的“存在”来筛选用户
User::whereHas('session', function ($q) {
$q->where('api_token', '12345');
})->get(); // ->first();
获取具有“api_令牌”==“12345”会话的所有用户
我终于让它工作了
$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();
但是我怎样才能获得会话的详细信息呢?我试过这个$q->select['id','device_id'];不获取会话详细信息此处不用于获取记录,它用于根据关系的存在进行筛选。。。使用“急加载”,您必须选择用于关系的键。。。如果你不这样做,它就无法将记录备份到他们的父母那里