簡體   English   中英

Laravel-最佳實踐更新,並使用對象數組將記錄保存到數據庫

[英]Laravel - Best Practice Update and Save Record to database using array of object

我想問一問最佳實踐,你們在使用對象數組將數據保存和更新到數據庫時如何做。

例如我有這個AoJ:

[
    {
        package_id: 1, 
        posts: [
            {id: 1, post_id: "1d1479c6-c114-46d5-becd-e4715c14e57d", name: "Post 1", price: 3000}
            {id: 2, post_id: "84f37e37-d050-4efd-bd08-811ab893959f", name: "Post 2", price: 3000}
            {id: 3, post_id: "1d1479c6-c114-46d5-becd-e4715c14e57d", name: "post 3", price: 3000}
            {id: 4, post_id: "84f37e37-d050-4efd-bd08-811ab893959f", name: "post 4", price: 3000}
        ]
    }
];

對於每個數組,我將在數據庫上使用新ID創建新行。

這就是我想要的

如果我要刪除ID 3,如何更新數據? 檢測應從包裝中刪除某些記錄的最佳實踐是什么?

現在,我的解決方案是:

[
    {
        package_id: 1, 
        posts: [
            {id: 1, post_id: "1d1479c6-c114-46d5-becd-e4715c14e57d", name: "Post 1", price: 3000, remove: false}
            {id: 2, post_id: "84f37e37-d050-4efd-bd08-811ab893959f", name: "Post 2", price: 3000, remove: false}
            {id: 3, post_id: "1d1479c6-c114-46d5-becd-e4715c14e57d", name: "post 3", price: 3000, remove: true}
            {id: 4, post_id: "84f37e37-d050-4efd-bd08-811ab893959f", name: "post 4", price: 3000, remove: false}
        ]
    }
];

因此,在更新package_id 1帖子時看到remove: true它將刪除它。

你們有什么感想? 有什么建議可以使其更簡單嗎?

注意:我不能使用刪除所有內容並發布新的一種方法。 因為每個package_id帖子都與其他表有關系

正如我們所討論的,讓我發布一個基本的解決方案。

我們有一個Post模型,例如

class Post extends Model{}

另一個是包裝模型

class Package extends Model{}

如果兩個都有主鍵“ id”,

描述它們之間多對多關系的數據透視表將是

package_id,post_id組合為復合主鍵,類似於

Schema::create('package_post', function (Blueprint $table) {
            $table->unsignedInteger('package_id');
            $table->unsignedInteger('post_id');

            $table->foreign('package_id')->references('id')->on('packages')
                ->onUpdate('cascade')->onDelete('cascade');
            $table->foreign('post_id')->references('id')->on('posts')
                ->onUpdate('cascade')->onDelete('cascade');

            $table->primary(['package_id', 'post_id']);
        }); 

根據需要,可能還有其他一些列。

關系會像

class Package extends Model { 

 public function posts()
    {
        return $this->belongsToMany( Post::class, 'package_post', 'package_id', 'post_id');
    }
}

 class Post extends Model { 

     public function packages()
        {
            return $this->belongsToMany( Package::class, 'package_post', 'post_id', 'package_id');
        }
    }

現在,當您要檢索或編輯或刪除它時,可以使用attach,detach等方法。

為了進行檢索,如果程序包id = 1,並且您要檢索該程序包的所有帖子,則可以像這樣檢索它

$posts= Package::find(1)->posts;

對於插入,您可以使用

$package->posts()->attach($post->id);

更新

$package->posts()->sync([$post_id]);

如果要將post_id 1更改為2

$package->posts()->wherePivot('post_id', 1)->sync(2);

分離

$package->posts()->detach($post_id);

檢查關系是否存在

$package->posts->contains($post_id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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