Laravel Eloquent 建模多对多或一对多

Laravel Eloquent Model many-to-many or one-to-many

阅读 Laravel Eloquent 模型文档后,我有点困惑。所以我有这个数据库结构:

task
   id
   name
   description

tag
   id
   name

task_tag
   id
   task_id
   tag_id

一个任务可能有零个、一个或多个标签。当然,一个标签可能与零个、一个或多个任务有关。

我试过了,但不确定:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model {
    public function tags() {
        return $this->hasMany('App\Tag');
    }
}

hasMany() 是这种情况下的最佳解决方案,还是我需要使用其他方法?

您所描述的听起来像是典型的多对多关系(包括您概述的枢轴 table)。 hasMany() 旨在用于一对多关系。对于多对多,您应该使用 belongsToMany()。所以你的任务模型看起来像:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }
}

Relevant docs.