gpt4 book ai didi

php - Laravel Eloquent 一对多

转载 作者:行者123 更新时间:2023-11-29 05:06:21 26 4
gpt4 key购买 nike

我是 Laravel 的新手,我正在尝试制作一个简单的 CMS 系统。我制作了以下一对多相关的模型:

页面(id、名称、 block )

public function blocks() {
return $this->hasMany('App\Block');
}

阻止(id、名称、显示名称、内容)

public function page() {
return $this->belongsTo('App\Page');
}

现在我想创建一个页面并立即设置 block 。我得到一个看起来像这样的 $request 对象:

{ 
"name": "Page name",
"blocks": [
{
"name": "block name",
"displayName": "Display Name",
"content": "Some HTML content"
}
]
}

现在,我试图将这些全部保存到数据库中,但我遇到了很多错误。

到目前为止,我得出的结论是我必须遍历每个“ block ”并实际创建一个新的 Block。但我不确定如何将它保存到数据库中。

我是先保存页面,然后添加 block ,还是先保存 block ,然后再添加页面。我有点困惑。

最佳答案

首先,确保在 block 表中有一个 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');
});
}

其次,您必须先将页面保存到数据库中,然后再将 block 添加到页面中。因为在创建 block 时需要 page_id。

最后,

You may use the createMany method to create multiple related models. See Laravel docs

示例:

$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'));

关于php - Laravel Eloquent 一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47269235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com