Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩的关系澄清_Php_Laravel 5_Laravel 5.5_Laravel Eloquent - Fatal编程技术网

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'];不获取会话详细信息此处不用于获取记录,它用于根据关系的存在进行筛选。。。使用“急加载”,您必须选择用于关系的键。。。如果你不这样做,它就无法将记录备份到他们的父母那里