2015-12-12 2 views
1

Я хочу сделать, гдеIn с закрытием. Это возможно?Красноречивый гдеIn с закрытием

Как правило, вы бы пойти и создать его как этот

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(); 

Однако, когда делать это, я получаю ошибку

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1096 No tables used'

я имею в виду, в таблице базы данных у меня есть строка с идентификаторы хранятся как 1, 2, 3, 4, поэтому мне просто нужно сделать explode(', ', $ids);. Это решит мою проблему, когда я сделаю это в два этапа, мне просто интересно, смогу ли я сделать это в одном, с закрытием. И если да, то как?

+2

Вы с помощью '$ user-> id' внутри закрытия, но вы не передавая' переменную $ user' в закрытие с помощью функции function() ($ user) '. Как это не бросает ошибку раньше всего? – Bogdan

+0

Эх, похоже, ошибка c & p – Musterknabe

ответ

1

Возможно, вы захотите сделать.

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

Предполагая, что идентификаторы пользователей сохраняются в Uid поле в таблице FooBar

+1

Эй, извините за поздний ответ. Смогу ли я прикрепить предложения к методу 'lists', например. 'User :: lists ('users') -> где ('x', 'y');'? – Musterknabe

+0

Больше похоже на 'User :: where ('x', 'y') -> lists ('users');' –

Смежные вопросы