如何根据Eloquent关系插入表中的外键数组

问题描述 投票:0回答:1

我有两个型号TeamMemberProjectRequest

一个TeamMember可以有一个ProjectRequest,这就是为什么我在TeamMember上创建了以下雄辩关系:

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 => "[email protected]"
       1 => "[email protected]"
       ]

这意味着我需要将team_members批量插入到project_request_ id中,每个团队成员都有电子邮件在阵列中。

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

 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个回答
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'
        ];
    }
}

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.