我试图将数据保存在第三个表中的多对多但是 数据没有保存 用户模型
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');
}
用于在第三个表中保存数据的控制器
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';
}
答案 0 :(得分:0)
您错误地使用了多对多关系。您不需要中间表的模型,因为Eloquent会为您处理它。
首先,您需要以正确的方式定义模型中的关系。第二个参数应该是中间表的名称,而不是模型。当您使用表名和外键列名的默认值时,可以跳过它们并执行:
Time taken by re.search = 0.00011801719665527344 seconds
Time taken by re.findall = 1.7739462852478027 seconds
如果您想在中间列中添加其他字段,则需要在使用 withPivot()方法定义关系时对其进行定义:
re.search
现在,如果您要将作业与用户相关联并设置中间数据透视表中的字段,则应使用 save()关于你的关系的强>方法:
public function Jobs()
{
return $this->belongsToMany('App\Models\Job');
}
public function Users()
{
return $this->belongsToMany('App\Models\User');
}
或
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');
}
在数据库中保存数据后,您可以使用相关模型的 pivot 属性从中间数据透视表中检索数据,例如:
$job->users()->save($user, ['cv' => $request->cv, 'current_salary' => $request->current_salary]);
或
$user->jobs()->save($job, ['cv' => $request->cv, 'current_salary' => $request->current_salary]);
查看文档,了解有关处理与Eloquent 多对多关系的更多信息:https://laravel.com/docs/5.1/eloquent-relationships#many-to-many