отношение laravel с использованием MySQL join - PullRequest
0 голосов
/ 23 октября 2019

У меня есть отношение в моей модели продукта, и оно работает нормально

        self::where('products.id', '=', $id)
        ->select('products.category_id', 'main_categories.id as main_category_id')
            ->join('categories', 'products.category_id', '=', 'categories.id')
                ->join('main_categories', 'categories.main_category_id', '=', 'main_categories.id')
                    ->first();

Я заменил его на

        self::where('products.id', '=', $id)
        ->select('products.category_id', 'categories.id as parent_id')
            ->join('categories', 'products.category_id', '=', 'categories.id')
                ->join('categories', 'categories.parent_id', '=', 'categories.id')
                    ->first();

Теперь я получаю эту ошибку

Синтаксическая ошибка или нарушение прав доступа: 1066 Не уникальная таблица / псевдоним: «категории» (SQL: выберите products. category_id, categories. id как parent_id из products внутреннее объединение categoriesна products. category_id = categories. id внутреннее соединение categories на categories. parent_id = categories. id, где products. id = 13 предел 1)

1 Ответ

1 голос
/ 23 октября 2019

Вы используете одну и ту же таблицу два раза для объединения без использования псевдонимов.

пожалуйста, обратитесь к приведенному ниже коду

self::where('products.id', '=', $id)
        ->select('products.category_id', 'cate1.id as parent_id')
            ->join('categories as cate1', 'products.category_id', '=', 'cate1.id')
                ->join('categories as cate2', 'cate1.parent_id', '=', 'cate2.id')
                    ->first();

ПРИМЕЧАНИЕ: надеюсь, parent_id вы ссылались с cate1. если нет, пожалуйста, не стесняйтесь изменить псевдоним на соответствующий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...