0

关于在 Laravel 中检索一对多关系数据,我有一些奇怪的问题。

模型

// JobTypes model
public function jobs()
{
    // one type of job has many jobs
    return $this->hasMany('App\Jobs', 'id'); // id refer to jobs.id
}

// Jobs model
public function job_types()
{
    // one job only belongs to one type of job
    return $this->belongsTo('App\jobTypes');
}

数据透视表

 Schema::create('jobs_job_types', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('jobs_id')->unsigned()->nullable();
        $table->integer('job_types_id')->unsigned()->nullable();
        $table->timestamps();

        $table->foreign('jobs_id')->references('id')->on('jobs');
        $table->foreign('job_types_id')->references('id')->on('job_types');
    });

控制器

$data = \App\JobTypes::paginate($items);

    return view('jobs.index', compact('data'))->with(array('showData' => $showData, 'count' => $count))->withItems($items);

看法

@foreach($data as $jobType)
        <td>
          @foreach($jobType->jobs as $category)
            {{ $category->name }}
          @endforeach
        </td>
    @endforeach 

我错过了什么吗?

4

2 回答 2

2

Laravel中的一对多关系不需要数据透视表。子关系(“多”端)可以简单地存储它所属的父模型的 id。

(另请参阅我上面关于遵循一般Laravel 命名约定的评论。)

楷模:

// JobType.php
class JobType extends Model
{
    public function jobs()
    {
        return $this->hasMany('App\Job');
    }
}

// Job.php
class Job extends Model
{
    public function job_type()
    {
        return $this->belongsTo('App\JobType');
    }
}

迁移:

// create_job_types_table.php
    Schema::create('job_types', function (Blueprint $table) {
        $table->increments('id');
        ...
    });

// create_jobs_table.php
    Schema::create('jobs', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('job_type_id')->unsigned()->index();
        ...

        $table->foreign('job_type_id')->references('id')->on('job_types');
    });
于 2020-12-30T15:09:58.000 回答
1

试试这样:

// JobTypes model
public function jobs()
{
    // one type of job has many jobs
    return $this->hasMany(\App\Job_Type::class, 'job_id');
}

// Jobs model
public function job_types()
{
    // one job only belongs to one type of job
    return $this->belongsTo('App\jobTypes','job_type_id','id');
}
于 2020-12-30T14:46:02.150 回答