[英]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.