(Laravel)表关系和外键的用法

时间:2017-09-07 18:53:49

标签: php mysql laravel laravel-5

我有三个表的迁移,我有一个问题,决定表将如何连接到彼此,我真的是一个外键,所以我想做什么我有两个角色1管理员 - 2个用户我希望将其中一个分配给每个用户,因为我只希望管理员用户登录到后端仪表板,因为现在我将角色和用户之间的关系视为一个(角色) - 多个(用户)也是帖子之间的关系用户是一个(用户)到多个(帖子),因为帖子只与一个用户有关,但用户可以有多个帖子所以我需要你在这里帮助以更好的方式理解那些事情,当我需要设置表中的外键。

这是我的表格:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('fullname');
        $table->string('username')->unique();
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('role_id')->unsigned();
        $table->foreign('role_id')->references('id')->on('roles');
        $table->rememberToken();
        $table->timestamps();
    });


Schema::create('roles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });


Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('content');
        $table->string('image');
        $table->timestamps();
    });

1 个答案:

答案 0 :(得分:1)

根据我的理解,您有三个表:角色,用户和帖子。

每当你有像一对多的关系时,对应于多边的表将包含对应于一边的表的外键。你不要在另一个表中放入任何外键。

现在,角色和用户表分别共享一对多关系,因此您将role_id放在用户表中,并且不在role表中放置任何外键。类似地,posts表位于关系的许多方面(一个用户可以有很多帖子),因此您必须将user_id放在posts表中,但在user表中没有外键。

创建迁移后,为了能够在表之间进行查询,您需要定义模型文件。这些模型文件将包含用于检索关联记录的方法。对于一对多关系,您将需要有两个模型(对于两个表),并且在这些模型中使用函数:belongsTo用于具有外键的表,以及hasMany没有外键的表的函数。对于您的情况,用户模型将为posts模型提供hasMany函数,为角色模型提供belongsTo函数。

希望清除它