#laravel #eloquent #laravel-query-builder #laravel-8
#laravel #красноречивый #laravel-конструктор запросов #laravel-8
Вопрос:
Я использую laravel-nestedset для создания категории статей.
Laravel: 8 / laravel-nestedset: 5.0.3
Категории таблиц
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
NestedSet::columns($table);
$table->boolean('publish')->default(true);
...
Статьи таблицы
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned()->nullable();
$table->foreign('category_id')->references('id')->on('categories');
...
Я создал ветку и подраздел в таблице категорий следующим образом:
news > politics
Я также создал две статьи и вставил их в разделы «новости» и «Политика«.
статья 1 в новостях
статья 2 в политике
Все работает!
Теперь у меня есть сценарий. Я хочу получить все статьи, которые находятся только в опубликованных категориях. (опубликовать = 1).
Я пробую это:
$query = AppArticle;
$query->where(function($query)
{
$query->whereHas('category' , function ($query) {$query->where('publish' , true ); });
});
Однако этот код работает только для текущей категории статей (не для родительской этой категории).
Позвольте мне объяснить больше на примере.
pulish
в «новостях» значение false. (pulish = 0
)
pulish
в «политике» верно. (pulish = 1
)
Теперь я хочу получить все статьи с помощью ( pulish=1
) в своей категории. Приведенный выше код запроса возвращает мне ‘article2.’ Я не ожидаю, что мне вернут статью. Поскольку даже «политика» есть publish=1
, ее родительский элемент (новости) есть publish=0
, поэтому связанные статьи публиковать не следует. Как можно изменить код запроса для поддержки родительского элемента (или, тем более, его главных родителей)?