【问题标题】:(Laravel) tables relationship and usage of foreign key(Laravel) 表关系及外键使用
【发布时间】:2018-02-16 14:25:31
【问题描述】:

我有一个包含三个表的迁移,我有一个问题决定表如何相互连接,我真的是它们的外键所以我想要做什么我有两个角色 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();
    });

【问题讨论】:

  • roles 不需要 user_id 列,要让用户发帖,您只需在用户模型中添加一个方法并在其中定义 ->hasMany(class::App\Post) 跨度>
  • 谢谢 ahmad 但是没有人会这样做 从角色表中的 user_id 获取帖子我必须通过用户模型完成我也只会在登录时检查用户角色是否用户类型是管理员或不是别的。

标签: php mysql laravel laravel-5


【解决方案1】:

据我了解,您有三个表:角色、用户和帖子。

当你有一个像一对多的关系时,对应于多方的表将包含对应于一方的表的外键。您没有在另一个表中放置任何外键。

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

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

希望可以解决

【讨论】:

  • 感谢 Muhammad 提供的信息,因此最终设置将如下所示 codeshare.io/an4xpn
  • @FahadAlDaferi 完全正确!
猜你喜欢
  • 1970-01-01
  • 2019-07-20
  • 2019-03-27
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多