我有两个型号TeamMember
和ProjectRequest
。
一个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'];
}
}
你可以做一些事情。
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'
];
}
}
我希望这有帮助。