需要在三个模型之间建立关系

时间:2019-04-22 12:51:01

标签: laravel eloquent relationship

我们有一个可以通过多种方式学习的用户。在每个方向上,用户都有一定程度。共有三种模型:用户,方向,级别。它们需要以用户可以获取其方向列表以及每个方向的级别的方式进行链接。例如,$user->directions[0]->level

再次关系。一个用户可能有很多指导,而一个指导可能有很多用户(很多对很多)。方向可以有多个级别,但是级别只能是一个方向(一对多)。

我使用 Laravel 5.8

2 个答案:

答案 0 :(得分:1)

您可以在laravel模型中使用如下所示的关系。

对于用户模型

public function directions()
{
    return $this->hasMany('App\Direction','user_id');
}

对于方向模型

public function users()
{
    return $this->hasMany('App\User','id','user_id');
}

public function levels()
{
    return $this->hasMany('App\Level','direction_id');
}

对于关卡模型

public function direction()
{
    return $this->hasOne('App\Direction','id','direction_id');
}

答案 1 :(得分:1)

由于用户具有许多方向,并且方向具有许多用户,因此您应该使用{{1} }(与数据库的多对多关系相关的口才关系。)

方向有很多 Level ,但是 Level 只有一个 Direction ,您应该使用{{1 }}和belongsToMany分别位于方向级别上。

hasMany
belongsTo
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function directions()
    {
        return $this->belongsToMany(Direction::class);
    }
}

更新

如果您尚未定义数据库表。这就是您可以这样做的方式。

您可以使用Laravel迁移来创建数据库表。

用户表

use Illuminate\Database\Eloquent\Model;

class Direction extends Model
{
    public function levels()
    {
        return $this->hasMany(Level::class);
    }

    public funciton users()
    {
        return $this->belongsToMany(User::class);
    }
}

路线表

use Illuminate\Database\Eloquent\Model;

class Level extends Model
{
    public function direction()
    {
        return $this->belongsTo(Direction::class);
    }
}

方向用户表

Schema::create('users', function (Blueprint $table) {
            $table->increment('id')->primary();
            // all the other columns goes here.
});

级别表

Schema::create('directions', function (Blueprint $table) {
            $table->increment('id')->primary();
            // all the other columns goes here.
});