Laravel, где условие не работает в отношении запроса WITH - PullRequest
0 голосов
/ 17 октября 2019

У меня есть простой запрос, который выглядит следующим образом:

$category = Category::with('translation')
            ->with(['childCategories' => function ($query) {
                $query->active();
            }])
            ->where('id', $id)->first();

Область и отношение:

public function scopeActive($query)
{
    return $query->where('active', 1);
}

public function childCategories()
{
    return $this->hasManyThrough('App\SupremeShop\Models\Category',
        'App\SupremeShop\Models\CategoryToCategory',
        'id_parent_category', //category_to_categories
        'id',  //categories
        'id',
        'id_category');  // category_to_categories.
}

Поэтому я ищу категорию, некоторые переводы и дочерние категории данного "основная категория. И запрос возвращает 15 дочерних категорий. Но в запросе есть область, в которой должен принимать только активные , а работает неправильно . Когда я использую dd, он также показывает неактивные дочерние категории. Я пытался удалить область и написать простой ГДЕ, но результат был тот же.

У кого-нибудь есть идеи, почему условие не работает должным образом?

1 Ответ

0 голосов
/ 17 октября 2019

Я считаю, что проблема в том, что столбец неоднозначен, поскольку Category и его отношение childCategories являются одной и той же моделью и используют одну и ту же таблицу.

Область действия active() применяется к родительскому элементу. Category вместо ребенка Categories.

Попробуйте и посмотрите, работает ли это

$category = Category::from('categories as c')
                    ->with(['childCategories' => function ($query) {
                        $query->active();
                    }])
                    ->where('id', $id)->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...