Laravel | Сделать выборку из промежуточной таблицы

197
10 февраля 2020, 12:00

Делал для самообучения блог, в котором посты и теги связаны между собой через промежуточную таблицу (pivot table) , соответственно имеются три таблицы:

    Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name', 80);
        $table->text('description')->nullable();
        $table->boolean('show')->default(0);
        $table->timestamps();
    });
    Schema::create('tags', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name', 80);
    });
    Schema::create('posts_to_tags', function (Blueprint $table) {
        $table->integer('post_id');
        $table->integer('posts_to_tags_id');
        $table->string('posts_to_tags_type');
    });

Есть некоторая страница на которой расположены теги. По логике вещей необходимо отображать только те теги, у которых есть уже посты, не выводить же те теги у которых пустые посты.

Для сие решения я нашёл несколько вариантов решения проблемы.

Первая:

  • сделать выборку из таблицы tags и проверить наличие posts

Из минусов стоит отметить:

  • прийдётся сделать полную выборку тегов и отсортировать их полностью, что повлечёт за собой лишнюю нагрузку.

Второй вариант:

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

Из минусов:

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

Есть ли нормальные варианты для решение текущей задачи или придётся выбирать первый вариант и не ***ахать себе мозг?

Чёрт, будто держу в руках ту заветную уточку, при рассказывании всего этого понял что первый вариант выглядит наиболее перспективнее и легче. А что думаете вы?

Answer 1

omg, решение было нелепее самого вопроса.

return Tags::whereHas('posts', function($query){
    return $query;
    // etc codeshit..
})->get();
READ ALSO
Скачивание файла с хостинга

Скачивание файла с хостинга

Есть файл обработчик, который создает дамп БД на хостинге, но я не могу скачать его

176
Ожидаемое количество товара

Ожидаемое количество товара

Есть ли возможность получить по API данные о числах ожидаемоq доставкиСпасибо

170
Проблема с поиском WordPress

Проблема с поиском WordPress

Сделал поиск на сайте стандартным поиском wpПри поиске записи он её находит, но ссылка там на саму запись

189
PHP | Bootstrap 4

PHP | Bootstrap 4

столкнулся с проблемой! Проблема заключается в том, чтоcontainer чутка сдвигаеться, не знаю что делать, перепробовал все!

172