首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我尝试选择单列,Laravel的"with“方法返回空列表

如果我尝试选择单列,Laravel的"with“方法返回空列表
EN

Stack Overflow用户
提问于 2017-05-15 08:11:30
回答 2查看 430关注 0票数 0

以下是我的疑问:

代码语言:javascript
复制
User::with([
        'roles' => function ($query) {
            $query->select('id AS value', 'display_name AS label');
        }
    ])->with([
        'followers' => function ($query) {
            $query->select('id', 'user_id');
        }
    ])->find($id);

这就是在mysql中执行的内容:

代码语言:javascript
复制
select `id`, `user_id` from `followers` where 
`followers`.`followable_id` in (1) and `followers`.`followable_type` = 'user'

在mysql的控制台中,returs的结果是:

代码语言:javascript
复制
+----+---------+
| id | user_id |
+----+---------+
|  4 |       2 |
|  5 |       3 |
+----+---------+

在json响应中,它是空的:

代码语言:javascript
复制
...
"followers": [],
...

如果我省略了这一行

代码语言:javascript
复制
$query->select('id', 'user_id');

然后json响应包含

代码语言:javascript
复制
    ...
    "followers" => array:2 [▼
    0 => array:6 [▼
      "id" => 4
      "followable_id" => 1
      "followable_type" => "user"
      "user_id" => 2
    ]
    1 => array:6 [▼
      "id" => 5
      "followable_id" => 1
      "followable_type" => "user"
      "user_id" => 3
    ]
   ]
   ...

我试过的是:

  1. $query->select('id','user_id');
  2. $query->select('user_id');
  3. $query->select('id','*');//这将返回前面显示的内容

我需要的是:获取用户I列表,以便响应包含

代码语言:javascript
复制
...
"followers": [2, 3],
...

我知道,在从数据库中获取并修改结果之后,我可以做foreach,但是为什么这个不能工作呢?

EN

回答 2

Stack Overflow用户

发布于 2017-05-15 10:44:58

with()函数查询中,使用addSelect instaead select,因为当使用select时,其他选择删除

试着希望这能帮上忙

票数 1
EN

Stack Overflow用户

发布于 2017-05-15 09:56:24

从闭包到with方法,您应该返回查询实例。

另外,如果呈现的MySQL查询与您预期的不匹配,那么我认为您的关系和/或MySQL查询出现了错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43974382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档