【问题标题】:laravel relation using MySQL join使用 MySQL 连接的 laravel 关系
【发布时间】:2019-10-23 12:04:41
【问题描述】:

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

        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_idcategories.id 作为parent_id 来自products 内部连接categories on products.category_id = categories.id 内连接categoriescategories.parent_id = categories.id 其中products.id = 13 限制 1)

【问题讨论】:

  • 您将加入categories 表两次。你期待吗?
  • 你可以查看这个链接stackoverflow.com/questions/1435177/…
  • 您将加入categories 表两次。这是你期待的吗?如果是,请通过简单添加->join('categories as category1', ........ 来添加别名
  • @SandeepSudhakaran 是的,我要加入类别表两次
  • ->join('categories', 'categories.parent_id', '=', 'categories.id') 检查此声明...为什么要加入 categoriescategories

标签: php mysql laravel


【解决方案1】:

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

请参考以下代码

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();

注意:希望,您从cate1 引用的parent_id。如果不是,请随时将别名更改为适当的名称。

【讨论】:

  • 我做了一些修改。请得到最新的答案。这是因为我忘记在选择中添加别名
  • 酷。快乐编码。希望你明白这个问题。如果没有,请随时询问。
  • 非常感谢
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2015-12-25
  • 2021-07-23
  • 2016-02-22
  • 1970-01-01
相关资源
最近更新 更多