pLavrenov
@pLavrenov
Разработка сайтов

Как составить запрос в Laravel?

Две модели связаны между собой hasMany
У модели Post есть много PostField

Posts:
Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('name');
            $table->timestamps();
        });


PostField:
Schema::create('post_fields', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('post_id')->unsigned();
            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
            $table->string('name');
            $table->string('value');
        });


Как получить Post со всеми полями value и сортировать по ним?
по одному можно вот так (думаю что немного не правильно но работает)
Post::select('post.id', 'year.value' )
            ->join('post_fields as year', function ($join) {
                $join->on('post.id', '=', 'year.post_id')->where('year.name', 'post_year');
            })->where('year.value', 2014)
            ->count();

а как дополнить чтобы фильтровать по нескольким значениям?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
pLavrenov
@pLavrenov Автор вопроса
Разработка сайтов
Правильный ответ: (более того работает быстрее чем джоин)
Post::whereHas(
                'post_fields', function ($query) {
                    $query->where('value', 2014);
                }
            )->whereHas(
                'post_fields', function ($query) {
                    $query->where('value', 'Серебряный');
                }
            )->with('post_fields')->first()->toArray()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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