【问题标题】:Eloquent whereIn with closure雄辩的 whereIn 与闭包
【发布时间】:2015-12-12 12:21:42
【问题描述】:

我想做一个带闭包的 whereIn。这可能吗?

通常,您会像这样创建它

return User::whereIn('id', [1, 2, 3])
            ->whereLang($channel)
            ->get();

但是,我想做的是用一个闭包来做——如果可能的话。我有一个数据库字段,其中有用户的 id 作为字符串(表设计不是我的,所以我目前无法更改它,必须使用它);

所以我试着这样做

return User::whereIn('id', function () {
    return FooBar::whereFooId('u' . $user->id)->get(['users'])->toArray();
})
    ->whereLang($lang)
    ->get();

但是,当我这样做时,我得到了错误

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE[HY000]:一般错误:1096 未使用表”

我的意思是,在数据库表中,我有一个字符串,其 id 存储为1, 2, 3, 4,所以我只需要做一个explode(', ', $ids);。这将解决我的问题,当我分两步完成时,我只是想知道我是否可以在一个关闭的情况下完成。如果有,怎么做?

【问题讨论】:

  • 您在闭包内使用了$user->id,但您没有将$user 变量传递给function () use ($user) 的闭包。怎么不先抛出错误?
  • 呃,好像是c&p错误

标签: php laravel laravel-5 eloquent


【解决方案1】:

您可能想要这样做。

return User::whereIn('id', FooBar::lists('uid'));

假设用户ID存储在FooBar表的uid字段中

【讨论】:

  • 嘿,很抱歉回答迟了。我能否将 where 子句附加到 lists 方法,例如User::lists('users')->where('x', 'y'); ?
  • 更像User::where('x', 'y')->lists('users');
猜你喜欢
  • 2018-01-17
  • 1970-01-01
  • 2016-02-07
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2019-01-18
  • 2021-12-18
相关资源
最近更新 更多