【问题标题】:Laravel SQLSTATE[42000]: Syntax error or access violationLaravel SQLSTATE[42000]:语法错误或访问冲突
【发布时间】:2023-04-01 21:00:02
【问题描述】:

我是 laravel 的新手,我坚持使用我的关系商店,如下所示

分类

    id  name            slug
-----------------------------------------------------------------
    3   Location        location
    4   Outfits         outfits
    5   Other           other

子类别

  id    category_id     name                slug
-----------------------------------------------------------------------------
     12     3           Club                club
     13     3           Home / Hotel        home-hotel
     14     3           Outdoor             outdoor
     15     3           Studio              studio
     16     4           Bikini / Swimwear   bikini-swimwear
     17     4           Dress               dress
     19     4           Jeans               jeans
     35     5           Dancing             dancing

类别模型

<?php

class Category extends Eloquent {

    public $timestamps = false;

    public function subcategory()
    {
        return  $this->belongsToMany('subcategory', "sub_categories");
    }
} 

我得到以下错误

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'sub_categories' (SQL: select `sub_categories`.*, `sub_categories`.`category_id` as `pivot_category_id`, `sub_categories`.`subcategory_id` as `pivot_subcategory_id` from `sub_categories` inner join `sub_categories` on `sub_categories`.`id` = `sub_categories`.`subcategory_id` where `sub_categories`.`category_id` = ?) (Bindings: array ( 0 => 1, )) 

请有人指出我做错了什么?

【问题讨论】:

  • 崩溃的查询是什么样的?
  • 这是一种雄辩的关系
  • {{ $category->subcategory->name }} 这就是重点
  • 我认为您需要描述您的类别和子类别的预期模型。正如它所映射的(据我所知),一个类别可以有许多子类别,一个子类别可以同时属于多个类别。这是你的意图吗?
  • 问题似乎是两个表同时映射到同名sub_category。多对多关系需要 3 个需要不同名称的表(类别/子类别/类别_子类别)。如果其中两个表具有相同的名称,您将收到所显示的错误。

标签: php mysql laravel relationship


【解决方案1】:

问题看起来像两个表同时映射到同名 sub_category 。

多对多关系需要 3 个需要不同名称的表(类别/子类别/类别_子类别)。如果其中两个表使用相同的名称进行映射,您将收到所显示的错误。

更改其中一个映射,您应该可以启动并运行。

【讨论】:

  • 关于 Eloquent 和 $model->belongsToMany('OtherModel') 的“更改其中一个映射”你会怎么做?我遇到了类似的情况,但我使用的是您上面描述的 3 表关系。我收到一个几乎相同的错误。嗯...
【解决方案2】:

你应该给同一个表不同的别名

改变这个

 inner join `sub_categories`

   inner join `sub_categories` as sc   
                                   ^^--//-this alias use it instead of sub_categories

在您的查询中会是

    select `sub_categories`.*, sc.`category_id` as `pivot_category_id`, sc.`subcategory_id` as `pivot_subcategory_id` from `sub_categories` inner join `sub_categories` sc on sc.`id` = `sub_categories`.`subcategory_id` where `sub_categories`.`category_id` = ?) (Bindings: array ( 0 => 1, )

例子:

 select * from table1 as t1
 inner join table1 as t2
on t1.id = t2.id

澄清您的错误: Not unique table/alias

您正在加入同一张表,但它们之间没有别名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 2017-10-29
    • 2019-06-06
    • 2015-09-20
    • 2015-10-12
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多