【问题标题】:associate function is not working in hasMany relation Laravel关联函数在 hasMany 关系 Laravel 中不起作用
【发布时间】:2016-11-13 15:42:59
【问题描述】:

我正在使用 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';
    }
}

我的关系在这里定义不正确吗?

【问题讨论】:

    标签: php laravel eloquent one-to-many laravel-5.3


    【解决方案1】:

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

    模型类作业:

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

    【讨论】:

    • 实施您的回答后我面临同样的问题
    • 错误是相同还是和上一个不同?
    • 我不知道为什么它会给出同样的错误。上面的错误显示column "job_site" of relation "job" does not exist 这是正确的,因为您的关系 FK 未正确定义。您可以通过在控制器Job::find(1)->jobsite 中运行此命令来测试它。
    • 我正在尝试点击$jobsite = Job::find(5)->jobsite()->job_site_id; ``dd($jobsite);,但它显示了这个错误:Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$job_site_id
    • 不要使用()括号,只使用Job::find(1)->jobsiteJob::find(1)->jobsite-> job_site_id。让我知道结果。
    猜你喜欢
    • 2020-03-24
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多