[英]Best Practice to update hasMany Relationships with laravel
您好實際上我正在嘗試創建一個應用程序,其中每個項目都有一些用戶,即ProjectMembers 。
這是項目 model 和團隊成員 function。
class Project extends Model
{
use HasFactory;
function TeamMembers(){
return $this->hasMany(ProjectMember::class);
}
}
項目成員表架構。
Schema::create('projects_members', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('project_id')->nullable();
$table->unsignedBigInteger('user_id')->nullable();
$table->foreign('project_id')->references('id')->on('projects');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
現在為了更新項目成員,我必須首先從項目成員中刪除關系,然后保存新的關系。 因為我添加了多選下拉列表。 $request->team_members具有數組類型。
public function update(Request $request, $id)
{
// return $request;
$project = Project::findorfail($id);
$project->name = $request->project_name;
$project->details = $request->details;
$project->start_date = $request->start_date;
$project->end_date = $request->end_date;
$members = $request->team_members;
ProjectMember::where('project_id', $id)->delete();
$this->update_project_memebers($members, $project);
return redirect('/projects');
}
public function update_project_memebers($members, $project){
foreach ($members as $member_id) {
$project_member = new ProjectMember();
$project_member->project_id = $project->id;
$project_member->user_id = $member_id;
$project_member->save();
}
}
在這里刪除,因為如果有人創建了有兩個成員的項目,當他/她想要更新時,他/她可以從多選中刪除一個成員,然后我必須刪除關系,因為他/她只選擇了一個用戶。
我不認為這是一個好習慣,所以我可以實現同樣的功能嗎? 用另一種方式? 謝謝。
首先請根據 laravel 對pivot 表進行適當的命名約定,model 名稱也相同。
截至目前,解決方案是
將關系定義為
項目
public function teamMembers()
{
return $this->belongsToMany(ProjectMember::class, 'projects_members', 'project_id', 'member_id');
}
項目成員
public function projects()
{
return $this->belongsToMany(Project::class, 'projects_members', 'member_id', 'project_id');
}
所以現在不是刪除使用 sync() 方法。 作為
$project->teamMembers()->sync($members);
重要文件,
https://laravel.com/docs/8.x/eloquent-relationships#syncing-associations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.