gpt4 book ai didi

php - 处理多对多表,第三个表需要更多属性

转载 作者:行者123 更新时间:2023-11-29 20:55:46 25 4
gpt4 key购买 nike

我正在尝试以多对多关系将数据保存在第三个表中,但是数据未保存用户模型

public function Jobs()
{
return $this->belongsToMany('App\Models\Job','App\Models\Job_User','user_id','job_id');
}

工作模式

public function Users()
{
return $this->belongsToMany('App\Models\User','App\Models\Job_User','job_id','user_id');
}

用于在第三个表中保存数据的 Controller 是

public function JobApplied(Request $request){
$applied= new Job_User();
$applied->user_id = Auth::id();
$applied->job_id = $request->job_id;
$applied->cv = $request->cv;
$applied->current_salary = $request->current_salary;
$applied->expected_salary = $request->expected_salary;
$applied->save();
return redirect('searchjobs');
}

第三个表的代码是

class Job_User extends Model
{
protected $fillable = [
'user_id','job_id','cv','current_salary','expected_salary','status',
];
protected $table = 'jobs_users';

}

最佳答案

您错误地使用了多对多关系。您不需要中间表的模型,因为 Eloquent 会为您处理它。

首先,您需要以正确的方式定义模型中的关系。第二个参数应该是中间表的名称,而不是模型。当您使用表名称和外键列名称的默认值时,您可以跳过它们,只需执行以下操作:

public function Jobs()
{
return $this->belongsToMany('App\Models\Job');
}

public function Users()
{
return $this->belongsToMany('App\Models\User');
}

如果您想在中间列中包含其他字段,则需要在使用 withPivot() 方法定义关系时定义它:

public function Jobs()
{
return $this->belongsToMany('App\Models\Job')->withPivot('cv','current_salary','expected_salary','status');
}

public function Users()
{
return $this->belongsToMany('App\Models\User')->withPivot('cv','current_salary','expected_salary','status');
}

现在,如果您想将作业用户链接并设置中间数据透视表中的字段,则应该使用save() 关系的方法:

$job->users()->save($user, ['cv' => $request->cv, 'current_salary' => $request->current_salary]);

$user->jobs()->save($job, ['cv' => $request->cv, 'current_salary' => $request->current_salary]);

将数据保存在数据库中后,您可以使用相关模型的pivot属性从中间数据透视表中检索数据,例如:

foreach($user->jobs as $job) {
echo $job->pivot->current_salary;
}

foreach($job->users as $user) {
echo $user->pivot->current_salary;
}

查看文档以获取有关使用 Eloquent 处理多对多关系的更多信息:https://laravel.com/docs/5.1/eloquent-relationships#many-to-many

关于php - 处理多对多表,第三个表需要更多属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com