簡體   English   中英

(Laravel)表關系和外鍵用法

[英](Laravel) tables relationship and usage of foreign key

我有三個表的遷移,並且我有一個問題來決定表如何相互連接,我是否真的對它們有外鍵,所以我要做什么我有兩個角色1 admin-2 user並且我想要將其中一個分配給每個用戶,因為我現在只希望管理員用戶登錄到后端儀表板,因為現在我將角色和用戶之間的關系作為一個(角色)一對多(用戶)進行分配,而帖子和用戶之間的關系是一個(用戶)到多個(帖子),因為該帖子僅與一個用戶相關,但是該用戶可以有多個帖子,因此我需要您在這里幫助您更好地了解這些內容以及何時需要設置外鍵在桌子上。

這是我的桌子:

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();
    });

據我了解,您有三個表:角色,用戶和帖子。

只要您具有一對多的關系,對應於多面的表將包含對應於該面的表的外鍵。 您不要在其他表中放置任何外鍵。

現在,角色和用戶表分別共享一對多關系,因此您將role_id放在用戶表中,而不在角色表中放置任何外鍵。 同樣,posts表位於關系的許多方面(一個用戶可以有多個帖子),因此您必須將user_id放在posts表中,而在user表中則不要包含外鍵。

創建遷移后,為了能夠在表之間進行查詢,您需要定義模型文件。 這些模型文件將包含用於檢索關聯記錄的方法。 對於一對多關系,您將需要具有兩個模型(用於兩個表),並且在這些模型中使用以下功能:帶外鍵的表的belongsTo和不帶外鍵的表的hasMany函數。 對於您的情況,用戶模型將對posts模型具有一個hasMany函數,對於角色模型將具有一個belongsTo函數。

希望能清除它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM