在第三个表中需要处理多对多表和更多属性

时间:2016-06-05 08:33:42

标签: php mysql laravel eloquent

我试图将数据保存在第三个表中的多对多但是 数据没有保存 用户模型

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

}

1 个答案:

答案 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