簡體   English   中英

Laravel Eloquent One-To-Many

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM