#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 в вашем примере массива. Но я рад, что вы нашли решение! 🙂