【问题标题】:How to insert into a table based on an Eloquent relationship an array of foreign keys如何根据 Eloquent 关系向表中插入外键数组
【发布时间】:2019-04-15 08:19:33
【问题描述】:

我有两个型号TeamMemberProjectRequest

一个TeamMember 可以有一个ProjectRequest,这就是我在TeamMember 上创建以下Eloquent 关系的原因:

class TeamMember extends Model {
 //
 protected $table = 'team_members';
 protected $fillable = ['project_request_id'];

 // Relations
 public function projectTeam() {
 return $this->hasOne('\App\Models\ProjectRequest', 'project_request_id');
}
}

在我的控制器中,我想查询两个表,但是它返回失败消息。

重要的是要知道$request->projectTeam 是一个电子邮件数组,如下所示:

array:2 [
       0 => "mv@something.com"
       1 => "as@something.com"
       ]

这意味着我需要将电子邮件所在数组中的每个团队成员的project_request_ id 批量插入team_members 表中。

我怎样才能以正确的方式做到这一点?以下是我的尝试:

 public function createProjectTeam(Request $request){
    try {
        $title = $request->projectTitle;
        $TeamMember = $request->projectTeam;
        $projectRequest = ProjectRequest::create(['project_title' => $title]);
        $projectRequestId = $projectRequest->id;
        $projectTeam = $this->teamMembers->projectTeam()->create(['project_request_id'=> $projectRequestId])->where('email', $TeamMember);
        //$projectTeam = TeamMember::createMany(['project_request_id' => $projectRequestId])->where($TeamMember);
        //dd($projectTeam);
        return $projectRequest.$projectTeam;

    } catch(\Exception $e){
        return ['success' => false, 'message' => 'project team creation failed'];
    }

}

【问题讨论】:

    标签: arrays where bulkinsert laravel-5.8 eloquent-relationship


    【解决方案1】:

    您可以做一些事情。

    Eloquent 提供了一个whereIn() 方法,允许您查询某个字段在指定数组中的哪个位置等于一个或多个。

    其次,您可以使用update() 方法将所有符合条件的团队成员更新为project_request_id

    public function createProjectTeam(Request $request)
    {
        try {
            $projectRequest = ProjectRequest::create(['project_title' => $request->projectTitle]);
    
            TeamMember::whereIn('email', $request->projectTeam)
                 ->update([
                     'project_request_id' => $projectRequest->id 
                 ]);
    
            return [
                'success'      => true,
                'team_members' => $request->projectTeam
            ];
    
    
        } catch(\Exception $e) {
            return [
                'success' => false,
                'message' => 'project team creation failed'
            ];
        }
    }
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2021-03-29
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多