Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (Laravel)表关系和外键的使用_Php_Mysql_Laravel_Laravel 5 - Fatal编程技术网

Php (Laravel)表关系和外键的使用

Php (Laravel)表关系和外键的使用,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我有一个三个表的迁移,我有一个问题,它决定了表之间的连接方式,我真的需要外键吗?所以我想做的是我有两个角色1 admin-2 user,我想给每个用户分配一个,因为我只想管理员用户登录到后端仪表板,因为现在我做了角色和用户之间的关系作为onerole到manyusers也是post和用户之间的关系是oneuser到manyposts,因为中的post仅与一个用户相关,但用户可以有多个post,因此我需要您在这里提供帮助,以便更好地理解这些内容,以及何时需要在表中设置外键 这是我的桌子: Sche

我有一个三个表的迁移,我有一个问题,它决定了表之间的连接方式,我真的需要外键吗?所以我想做的是我有两个角色1 admin-2 user,我想给每个用户分配一个,因为我只想管理员用户登录到后端仪表板,因为现在我做了角色和用户之间的关系作为onerole到manyusers也是post和用户之间的关系是oneuser到manyposts,因为中的post仅与一个用户相关,但用户可以有多个post,因此我需要您在这里提供帮助,以便更好地理解这些内容,以及何时需要在表中设置外键

这是我的桌子:

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!