我遇到了問題,我的資料透視表的 FK 的 ID 在插入之前混淆了,因此我收到一個錯誤,因為 ID 高的類別不可用。
這是我嘗試插入的方法:
$newAdvertisement = new Advertisement();
$newAdvertisement->name = $request->name;
$newAdvertisement->save();
$newAdvertisement->advertisementCategories()->attach($request->selectedCategory);
廣告遷移和類功能:
public function advertisementCategories(): BelongsToMany
{
return $this->belongsToMany(
AdvertisementCategory::class,
'advertisement2advCategory',
'advertisementCategory_id',
'advertisement_id'
);
}
//Advertisement
Schema::create('advertisement', function (Blueprint $table) {
$table->id();
$table->string('name')->default('');
});
這里是類別類功能和遷移:
public function advertisements(): BelongsToMany
{
return $this->belongsToMany(
Advertisement::class,
'advertisement2advCategory',
'advertisement_id',
'advertisementCategory_id'
);
}
Schema::create('advertisement2advCategory', function (Blueprint $table) {
$table->foreignId('advertisement_id');
$table->foreign('advertisement_id')
->references('id')
->on('advertisement')
->onDelete('cascade');
$table->foreignId('advertisementCategory_id');
$table->foreign('advertisementCategory_id')
->references('id')
->on('advertisementCategory')
->onDelete('cascade');
});
在錯誤訊息中,您可以清楚地看到,advertising_id 和advertisingCategory_id 混淆了...在此示例中,已創建 ID 為 19 的廣告,并且所選類別(存在)的 ID 為 4,但生成的 sql 正在嘗試插入一個 ID 為 4 的廣告和一個 ID 為 19 的籠子。只是如何?
我正在使用最新版本的 laravel 和 php 8.1.1
SQLSTATE [23000]:完整性約束違規:1452不能添加或更新子行,外鍵約束失敗(
umarketdb。advertisement2advCategory,約束advertisement2advcategory_advertisementcategory_id_foreign外鍵(advertisementCategory_id)參考文獻advertisementCategory(i) (SQL: insert intoadvertisement2advCategory(advertisementCategory_id,advertisement_id`)值(19,4))
uj5u.com熱心網友回復:
您需要將第 3 個和第 4 個引數的順序切換為belongsToMany. 事物的命名方式有點令人困惑,但根據檔案:
“第三個引數是您定義關系的模型的外鍵名稱,而第四個引數是您要加入的模型的外鍵名稱。” - Laravel 8.x 檔案- Eloquent - 關系 - 多對多 - 模型結構
因此,如果您在 Category 模型上定義與 Advertisement 的關系,那么第三個引數是參考categories( category_id)的外鍵。第四個引數是參考另一個模型/表advertisements( advertisement_id)的外鍵。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401813.html
