[英]laravel - Update one to many polymorphic relationship
我在一對多多態關系中有三個表
┌─────────────────┐ ┌─────────────────┐ ┌──────────────────┐
│ users │ │ phones │ │ departments │
├─────────────────┤ ├─────────────────┤ ├──────────────────┤
| id | | id | | id |
| name | | name | | name |
└─────────────────┘ | phones_type | └──────────────────┘
| phones_id |
└─────────────────┘
手機型號:
public function phones()
{
return $this->morphTo();
}
用戶模型:
public function phones()
{
return $this->morphMany('App\Phone', 'phones');
}
部門型號:
public function phones()
{
return $this->morphMany('App\Phone', 'phones');
}
現在我想更新電話號碼,以便用戶可以編輯/添加/刪除號碼。我無法一步搞定,所以我嘗試先刪除所有電話,然后添加新號碼
我的代碼:DepartmentController:
public function update(UpdateDepartment $request, Department $department)
{
$department->phones()->delete();
$department->name = $request['name'];
$department->save();
foreach ($request->phone as $value) {
$phone = new Phone;
$phone->name = $value;
$ department->phones()->save($phone);
}
}
更新部門.php:
public function rules()
{
return [
'name' => 'required|alpha_spaces|min:3|max:255|unique: department,name,'.$this-> department ->id,
'phone' => 'required|array|unique:phones,name,'
'phone.*' => 'required|distinct|unique:phones,name,',
];
}
我有兩個問題:
1-這是正確的方法嗎? 有沒有辦法一步同步更新的電話號碼?
2-如果是這樣...如果用戶只是將電話號碼添加到現有號碼,如何強制執行唯一規則忽略給定的ID?
1 - 您可以發送一些帶有新電話號碼的標識符 (id),這樣您就會知道到底修改了什么電話號碼,例如將一些data-id="{{ $phone->id }}"
放入電話字段並構建請求用javascript做這樣的事情:
"phones":
{
"1"(your phone id):"+123456789",
"2":"+123654978",
}
而不是像這樣迭代槽請求數據:
public function update(UpdateDepartment $request, Department $department)
{
$department->name = $request['name'];
foreach ($request->phones as $id => $value) {
$department->phones->transform(function($item) use ($id, $value){
if($item->id == $id) {
$item->name = $value;
$item->save(); //if You using laravel 5 You need to savve each phone model separately
}
});
}
$department->push(); //if You using laravel 6.x, this will save model with all changed/created relations
}
但我建議將電話號碼作為json
存儲在用戶和部門的單獨字段中,這樣就可以簡單地用請求中的新數字替換模型中的舊數字集,而無需對數據庫進行不必要的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.