Php 口若悬河
我想用闭包做一个实验。这可能吗 通常,您会这样创建它Php 口若悬河,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我想用闭包做一个实验。这可能吗 通常,您会这样创建它 return User::whereIn('id', [1, 2, 3]) ->whereLang($channel) ->get(); return User::whereIn('id', function () { return FooBar::whereFooId('u' . $user->id)->get(['users'])->toArray()
return User::whereIn('id', [1, 2, 3])
->whereLang($channel)
->get();
return User::whereIn('id', function () {
return FooBar::whereFooId('u' . $user->id)->get(['users'])->toArray();
})
->whereLang($lang)
->get();
但是,我想做的是,如果可能的话,用闭包的方式来完成。我有一个数据库字段,它将用户ID作为字符串(表设计不是我的,所以我目前无法更改它,必须使用它)
所以我试着这样做
return User::whereIn('id', [1, 2, 3])
->whereLang($channel)
->get();
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
一样存储的字符串,所以我只需要执行分解(“,”,$id)代码>。这将解决我的问题,当我分两步做的时候,我只是想知道我是否可以用闭包一步做。如果是这样,怎么做?你可能想做
return User::whereIn('id', FooBar::lists('uid'));
假设用户id存储在FooBar
表中的uid字段中您在闭包内部使用$user->id
,但您没有使用函数()use($user)
将$user
变量传递给闭包。为什么不先抛出一个错误呢?呃,看起来像是c&p错误嘿,很抱歉回答晚了。我是否能够将where子句附加到lists
方法,例如User::lists('users')->where('x','y')代码>?更像User::where('x','y')->列出('users')代码>