关联函数不工作在hasMany关系Laravel


associate function is not working in hasMany relation Laravel

我正在使用Laravel 5.3,并且在通过hasMany关系保存时遇到问题。

我有表作业和工地有一对多的关系,即每个工地有一个或多个作业

但是当我试图使用associate()在作业表中添加job_job_site_id时,它向我发送一个错误:

SQLSTATE[42703]: Undefined column: 7 ERROR: column "job_site" of relation "job" does not exist
LINE 1: update "job" set "updated_at" = $1, "job_site" = $2 ...
^ (SQL: update "job" set "updated_at" = 2016-11-13 15:29:37, "job_site" = where "job_id" = 3)
SQLSTATE[42703]: Undefined column: 7 ERROR: column "job_site" of relation "job" does not exist
LINE 1: update "job" set "updated_at" = $1, "job_site" = $2 ...
^

数据库结构:

job (1st table)
– job_id
– job_name
– job_job_site_id
- created_at
- updated_at
job_site (2nd table)
– job_site_id
– job_site_name
- created_at
- updated_at

模型类作业:

class Job extends Model
{
    protected $table = 'job';
    protected $primaryKey = 'job_id';
    public function jobsite() {
        return $this->belongsTo('App'Models'JobSite', 'job_site', 'job_job_site_id', 'job_site_id');
    }
}   

模型类JobSite:

class JobSite extends Model
{
    protected $table = 'job_site';
    protected $primaryKey = 'job_site_id';
    public function jobs() {
        return $this->hasMany('App'Models'Job', 'job', 'job_job_site_id', 'job_id');
    }
}

控制器:

public function jobsiteJobs($data)
{
    $jobsite = JobSite::find(3);
    $job_id = array(1,2,3);
    if (!empty($jobsite)) {
        foreach ($job_id as $id) {
            $job = Job::find($id);
            $job->jobsite()->associate($jobsite);
            $job->save();
        }
        return 'Added';
    }   
    else {
        return 'Not found';
    }
}

我的关系定义不正确吗?

是的,你错误地定义了关系。正确的版本如下:

模型类作业:

class Job extends Model
{
    protected $table = 'job';
    protected $primaryKey = 'job_id';
    public function jobsite() {
        return $this->belongsTo('App'Models'JobSite', 'job_job_site_id', 'job_site_id');
    }
}   

模型类JobSite:

class JobSite extends Model
{
    protected $table = 'job_site';
    protected $primaryKey = 'job_site_id';
    public function jobs() {
        return $this->hasMany('App'Models'Job', 'job_job_site_id', 'job_site_id');
    }
}