Php Laravel SQLSTATE[42000]:语法错误或访问冲突
我是拉威尔的新手,我一直在我的关系商店里工作,就像下面这样 类别Php Laravel SQLSTATE[42000]:语法错误或访问冲突,php,mysql,laravel,relationship,Php,Mysql,Laravel,Relationship,我是拉威尔的新手,我一直在我的关系商店里工作,就像下面这样 类别 id name slug ----------------------------------------------------------------- 3 Location location 4 Outfits outfits 5 Other other 亚类 id category_id
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");
}
}
有人能指出我做错了什么吗?您应该给同一张表指定不同的别名 改变这个
inner join `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
错误澄清:非唯一表/别名
您正在将没有别名的同一个表连接到不同的表。问题似乎是两个表同时映射到同一名称子类别 多对多关系需要3个需要不同名称的表(类别/子类别/类别\子类别)。如果其中两个表使用相同的名称进行映射,您将得到显示的错误
更改其中一个映射,您应该可以启动并运行。崩溃的查询是什么样子的?它是一种雄辩的关系{{{$category->subcategory->name}}这就是我认为您需要描述的类别和子类别的预期模型。根据映射(据我所见),一个类别可以有许多子类别,并且一个子类别可以同时属于多个类别。这就是您想要的吗?问题似乎是两个表同时映射到同一个名称
sub_category
。多对多关系需要3个需要不同名称的表(类别/子类别/类别\子类别)。如果其中两个表具有相同的名称,您将看到显示的错误。对于Eloquent和$model->belongTomany('OtherModel'),您如何进行“更改其中一个映射”?我遇到过类似的情况,但我使用的是您上面描述的3表关系。我收到一个几乎相同的错误。六羟甲基三聚氰胺六甲醚。。。
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