@lynnikvadim

Как получить записи из БД в Laravel?

Есть таблица post в которой есть ячейка "category".
В эту ячейку записываются категории поста. Имеют вид "Архитектура;Строительство;Монтаж"
Как мне сделать выборку всех постов которые имеют категорию "Строительство" ?
  • Вопрос задан
  • 8019 просмотров
Решения вопроса 1
65536
@65536
Есть таблица post в которой есть ячейка "category".
В эту ячейку записываются категории поста. Имеют вид "Архитектура;Строительство;Монтаж"

вообще это неправильно. у вас должно быть 2 таблицы связанные связью 1 ко много.

class Post extends Eloquent
{
    public $table = 'posts';

    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

class Category extends Eloquent
{
    public $table = 'categories';

    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

тогда вы сможете красиво выгребать нужные записи, например такая конструкция вернет коллекцию моделей постов в категории такой-то
Category::where('name', 'такая-то')->posts;
если нужно применить сортировку или условие, тогда нужно вызывать как метод
Category::where('name', 'такая-то')->posts()->where('public', true)->orderBy('created_at')->get();

так же в обратном порядке, можно получить категорию модели для поста такого-то, например с таким-то ид
Post::find($id)->category;
создать пост в такой-то категории
Category::find($id)->posts()->create(array('text' => 123));


и тд. почитайте лучше документацию, там все просто как 3 копейки
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
zvermafia
@zvermafia
WebDev
Сойдет?:
PostModel::whereCategory('Строительство')->get();
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ответ написан
Комментировать
@Arik
С такой архитектурой БД тут три вопроса:
1. Как правильно сделать запрос в БД?
2. Как этот запрос сделать через Laravel?
3. Как сделать используя модели Laravel, тут Models\Post?

1. Если архитектуру БД нет возможности поменять, то я бы использовал регулярку в БД, что-то вроде:
SELECT * FROM `post` WHERE `category` REGEXP '(?:^|;)Строительство(?:$|;)'


2/3. Покурить доки:
laravel.com/docs/5.1/database
laravel.com/docs/5.1/eloquent
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы