@NikesDark
Анализирую на диване

Как в Laravel найти экземпляр модели по содержимому в бд?

Доброй ночи всем. Столкнулся с трудностью одной. Есть модель Guides , у которой есть поля id, categories_id . И в categories_id хранится json в формате ["1","2","3"]. И суть такова: мне нужно найти все строки из бд где в json поля categories_id есть допустим цифра 1.
  • Вопрос задан
  • 575 просмотров
Решения вопроса 2
Denormalization
@Denormalization
Как ...?
Перестать велосипедить и сделать нормальные таблицы и связи. HasMany| Many to Many тут прекрасно подойдет (не знаю как оно там должно работать).

Пример:

Таблица guides:
id | name
Таблица categories:
id | name
Таблица для связи (category_guide):
guide_id | category_id

Прописываем для модели Guide:
public function categories()
{
  return $this->belongsToMany('App\Models\Category');
}


И для модели Category:
public function guides()
{
  return $this->belongsToMany('App\Models\Guide');
}


Теперь можем просто:
$ids = [1, 2, 3];
$guides = App\Models\Guide::whereHas('categories', function ($q) use ($ids)
{
  return $q->whereIn('id', $ids);
})->get();


Получаем список всех гайдов, которые входя в категории с ID = 1, 2, 3

Или чтобы получить кол-во гайдов в катергории:
$category = Category::find(1);
$count = $category->guides()->count();
Ответ написан
JhaoDa
@JhaoDa
LaravelRUS Team
См. правильный ответ выше. Если что-то мешает (странное ТЗ, религия, тимлид, начальство), то:
1.
Guides::where('categories_id', 'LIKE', "%\"{$cat_id}\"%")

2. Перейти на PostgreSQL, он умеет искать в json'е.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы