Как вставить в таблицу на основе отношения Eloquent массив внешних ключей - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть две модели TeamMember и ProjectRequest.

A TeamMember может иметь один ProjectRequest, поэтому я создал следующие отношения Eloquent на 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 => "mv@something.com"
       1 => "as@something.com"
       ]

Это означает, что мне нужно массово вставить в 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'];
    }

}

1 Ответ

1 голос
/ 15 апреля 2019

Есть несколько вещей, которые вы можете сделать.

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

Надеюсь, это поможет.

...