Php (Laravel)表关系和外键的使用
我有一个三个表的迁移,我有一个问题,它决定了表之间的连接方式,我真的需要外键吗?所以我想做的是我有两个角色1 admin-2 user,我想给每个用户分配一个,因为我只想管理员用户登录到后端仪表板,因为现在我做了角色和用户之间的关系作为onerole到manyusers也是post和用户之间的关系是oneuser到manyposts,因为中的post仅与一个用户相关,但用户可以有多个post,因此我需要您在这里提供帮助,以便更好地理解这些内容,以及何时需要在表中设置外键 这是我的桌子:Php (Laravel)表关系和外键的使用,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我有一个三个表的迁移,我有一个问题,它决定了表之间的连接方式,我真的需要外键吗?所以我想做的是我有两个角色1 admin-2 user,我想给每个用户分配一个,因为我只想管理员用户登录到后端仪表板,因为现在我做了角色和用户之间的关系作为onerole到manyusers也是post和用户之间的关系是oneuser到manyposts,因为中的post仅与一个用户相关,但用户可以有多个post,因此我需要您在这里提供帮助,以便更好地理解这些内容,以及何时需要在表中设置外键 这是我的桌子: Sche
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();
});
据我所知,您有三个表:角色、用户和帖子 当您有一对多这样的关系时,对应于多个边的表将包含对应于一个边的表的外键。不要在另一个表中放入任何外键 现在,角色和用户表分别共享一对多关系,因此您将角色id放入用户表中,而不将任何外键放入角色表中。类似地,posts表位于关系的多个方面,一个用户可以有多个posts,因此您必须将user_id放入posts表中,但用户表中没有外键 创建迁移之后,为了能够在表之间进行查询,需要定义模型文件。这些模型文件将包含用于检索关联记录的方法。对于一对多关系,两个表都需要有两个模型,并且在这些模型中,对于具有外键的表使用函数:belongsTo,对于不具有外键的表使用hasMany函数。对于您的情况,用户模型将为posts模型提供hasMany函数,为roles模型提供belongsTo函数
希望能澄清这一点角色不需要用户id列,要获得用户帖子,您只需在您的用户模型中添加一个方法,并在其中定义->hasManyclass::App\post谢谢ahmad,但没有人能够从角色表中的用户id获得帖子我必须通过用户模型完成,而且我只会在登录时检查用户角色是否为管理员。谢谢这是穆罕默德的信息,所以最终的设置将看起来像这个@FahadAlDaferi!