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