![](/img/trans.png)
[英]Integrity constraint violation: 1452 Cannot add or update a child row laravel 6
[英]Laravel 5.8 - Cannot add or update a child row using Laravel
我有一個包含多個數據的簡單表,如下所示:
我創建了一個與名為prebids
的表的關系,如下所示:
public function up()
{
Schema::create('prebids', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('bidder_name');
$table->string('params_name');
$table->string('params_value');
$table->bigInteger('page_id')->unsigned();
$table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade');
$table->timestamps();
});
}
這是頁面 model:
class Page extends Model
{
protected $fillable = [
"title",
"articles",
"status"
];
public function prebids() {
return $this->hasMany('App\Prebid');
}
}
這是預出價 model:
class Prebid extends Model
{
protected $fillable = [
"params_name",
"params_value",
"bidder_name"
];
public function page()
{
return $this->belongsTo('App\Page');
}
}
現在,當用戶單擊添加預出價時,我想按照 model 存儲預出價數據。
所以在pages index.blade.php
上添加按鈕我有這個
<td>
<a href="{{ route('prebids.create'), $page->id}}"
class="btn btn-sm btn-primary">Add prebid</a>
在prebid controller
我有以下內容:
class PrebidController extends Controller
{
public function create()
{
$prebid = Prebid::all();
$page = Page::all();
return view('prebids.create', ['page' => $page]);
}
public function store(Request $request)
{
foreach ($request->input() as $parameters) {
$parameters = new prebid();
$parameters->save();
}
return redirect("/pages")->with("sucess", "data successfully saved");
}
}
現在,當用戶單擊添加預出價時,它會打開一個表單,用戶可以在其中添加信息並提交,當我提交時,我收到以下錯誤
SQLSTATE [23000]:完整性約束違規:1452 無法添加或更新子行:外鍵約束失敗(
royalad
,CONSTRAINTprebids
prebids_page_id_foreign
(page_id
)引用pages
(id
)ON DELETE CASCADE)(SQL:插入到prebids
(updated_at
,created_at
) 值 (2019-11-06 15:24:34, 2019-11-06 15:24:34))
我的代碼有什么問題?
您需要在保存之前將頁面與 model 關聯:
$parameters = new prebid();
$parameters->page()->associate( $theActualPageObject )
$parameters->save();
否則,您的prebid
表中的page_id
列將為空,這是不允許的,因為您在那里設置了與pages.id
的關系 - 因此外鍵約束錯誤。
如果您不總是有一個頁面,您還可以將page_id
設置為可為nullable
並將其默認為null
$table->bigInteger('page_id')->unsigned()->nullable()->default(null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.