【发布时间】:2021-12-13 14:37:28
【问题描述】:
我是 Laravel 的新手,我想学习如何使用引用主键的 2 个外键创建递归关系。
我有表 item_associations,其中有 2 个 FK 引用了 item table 的 PK:
Schema::create('item_associations', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->unsignedInteger('item_id');
$table->foreign('item_id')
->references('id')
->on('items');
$table->unsignedInteger('item2_id');
$table->foreign('item2_id')
->references('id')
->on('items');
});
这是我的ItemAssociation model:
protected $table = 'item_associations';
public function items(){
return $this->belongsTo('App\Models\Item','item_id');
}
public function item2_id(){
return $this->belongsTo('App\Models\Item','item2_id', 'item_id');
}
这是我的Item model:
protected $table = 'items';
public function item_associations(){
return $this->hasMany(UserType::class);
}
这是我的 Welcome 控制器:
$item_association = DB::table('item_associations')
->join ('items', 'item_associations.item_id', '=', 'items.id')
->join ('items', 'item_associations.item2_id', '=', 'items.id')
->get();
return view('welcome', [
'item_association' => $item_association,
]);
显然,我收到一个错误:
SQLSTATE[42000]:语法错误或访问冲突:1066 不是唯一的表/别名:'items'(SQL:select * from item_associations 内部连接 items on item_associations.item_id = items.@987654336 @inner join items on item_associations.item2_id = items.id)
【问题讨论】:
-
有什么理由不使用多对多关系吗?
-
如果 item2_id 等于 item_id 那么它不应该有单独的关系。如果它们是不同的 id,那么您需要使用多对多关系。
-
@Bulent 我希望我的 item2_id 与 item_id 相关,例如,如果客户订购的是 item_it 的食物,那么所选项目可能会附带额外的项目(比如说肉汁),这就是为什么我需要 item2_id
-
@DiegoDieh 我希望我的 item2_id 与 item_id 相关,例如,如果客户订购的是 item_it 的食物,那么所选项目可能会附带额外的项目(比如说肉汁),这就是为什么我需要 item2_id
标签: mysql laravel laravel-blade laravel-controller laravel-models