Laravel 4 Eloquent: как выбрать, где находится значение в массиве?

#php #laravel-4 #eloquent

#php #laravel-4 #красноречивый

Вопрос:

Предположим, у меня есть модель с записью в БД, подобная этой:

 row1: id: 1  users:["1","2","3"] 
row2: id: 2  users:["3","4","5"]
 

Пользователи — это данные, отформатированные из json_encode(array($user_id)) . Теперь я хочу получить модель, если user_id users она включена. Итак, если my user_id равно 2, я получу только строку 1, но если my user_id равно 3, я получу оба row1 и row2 .

Я пробовал что-то вроде Model::whereIn('users', $user_id)->get(); , это не работает, какие-либо другие способы достижения этого красноречивого способа?

Ответ №1:

Надеюсь, вы сохраняете свой идентификатор пользователя в сеансе или что-то в этом роде, поэтому your_id ссылается на идентификатор, присвоенный вам.

 Model::where('id','!=',your_id)->get();
 

Это вернет все ваши строки, кроме id = your_id

Комментарии:

1. Я думаю, вы неправильно поняли мой вопрос, я пытаюсь получить модель на основе users столбца, а не id столбца (это id не имеет никакого отношения к $user_id , это идентификатор самой модели).

2. Это не лучшая практика, вы должны реализовать концепцию сводной таблицы. или же извлекать и обрабатывать.

Ответ №2:

Я не думаю, что есть очень красноречивый способ сделать это. Но поскольку вы используете json_encode, мы можем предположить, что все данные форматируются одинаково, и сделать что-то вроде этого:

 Model::where('users', 'like', '%"'.$user_id.'"%')->get();
 

Это должно сработать. Обычно ваша ситуация лучше всего решается с помощью сводных таблиц, но, конечно, вам не обязательно использовать их, как сказал другой парень.

Комментарии:

1. этот подход впервые пришел мне в голову, к сожалению, когда у меня есть такие данные [’13’,’14’,’24’], $ user_id = 1 все еще считается (ну, поскольку я понимаю, что реального способа сделать это нет, я уже переделал свою таблицу,спасибо за ответ)

2. Нет, это не так. Он буквально ищет "1" , с чем угодно до и после. Ваш пример не содержит "1" , поэтому он не найдет 13, 14 или 24 в вашем примере массива. Но я рад, что вы нашли решение! 🙂