[英]Laravel Eloquent One-To-Many
我是Laravel的新手,我正在尝试制作一个简单的CMS系统。 我制作了以下与一对多相关的模型:
页面 (id,name,blocks)
public function blocks() {
return $this->hasMany('App\Block');
}
块 (id,name,displayName,content)
public function page() {
return $this->belongsTo('App\Page');
}
现在我想创建一个页面并立即设置块。 我得到一个$request
对象看起来像这样:
{
"name": "Page name",
"blocks": [
{
"name": "block name",
"displayName": "Display Name",
"content": "Some HTML content"
}
]
}
现在,我正在尝试将这些全部保存到数据库中,但我遇到了很多错误。
到目前为止,我总结说我必须迭代每个'块'并实际创建一个新Block
。 但我不确定如何将其保存到数据库中。
我先保存页面,然后添加块或首先是块,然后是页面。 我有点困惑。
首先,确保blocks表中有page_id
列,外键约束如下:
public function up()
{
Schema::create('blocks', function (Blueprint $table) {
$table->increments('id');
// your fields here
$table->integer('page_id')->unsigned();
$table->timestamps();
$table->foreign('page_id')
->references('id')
->on('pages')
->onDelete('cascade');
});
}
其次,您必须先将页面保存到数据库,然后将块添加到页面中。 因为在创建块时需要page_id。
最后,
您可以使用
createMany
方法创建多个相关模型。 请参阅Laravel文档
例:
$page = App\Page::create([
'name' => 'name',
]);
$blocks = $page->blocks()->createMany([
[
'name' => 'name1',
'displayName' => 'displayName1',
'content' => 'content1'
],
[
'name' => 'name2',
'displayName' => 'displayName2',
'content' => 'content2'
],
]);
// to get all blocks from the request
$blocks = $page->blocks()->createMany(request('blocks'));
尝试使用createMany方法。 像这样做。 你可以参考文档 。
$page = Page::create($request->only('name'));
$page->blocks()->createMany($request->get('blocks'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.