簡體   English   中英

更新 hasMany Relationships 的最佳實踐 laravel

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

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