首页 > 解决方案 > 使用 MySQL 连接的 laravel 关系

问题描述

我的产品模型中有一个关系,它工作正常

        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 不是唯一的表/别名:'categories'(SQL:选择products. category_id, categories. id as parent_idfrom productsinner join categorieson products. category_id= categories. idinner join categories on categories. parent_id= categories. idwhere products. id = 13 limit 1)

标签: phpmysqllaravel

解决方案


您在不使用任何别名的情况下两次使用同一个表进行连接。

请参考以下代码

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. 如果不是,请随时将别名更改为适当的名称。


推荐阅读