簡體   English   中英

使用Laravel Eloquent選擇多個表

[英]Selecting more than one table with Laravel Eloquent

我有3個表-用戶,角色和role_user。 每個用戶都在role_user表中分配了一個角色,並且在角色表中找到了角色列表。 我想選擇角色ID為12的所有用戶。我目前正在使用查詢生成器來執行此操作,但我需要它使用雄辯的格式。 我對Laravel雄辯並不十分滿意,請在將查詢轉換為雄辯方面需要幫助。 這是我目前正在做的:

 $users = DB::table('users')
            ->join('role_user', 'users.id', '=', 'role_user.user_id')
            ->join('roles', 'roles.id', '=', 'role_user.role_id')
            ->where('roles.id', '=', 12)
            ->get();

使用Eloquent,可以很輕松地按照Laravel 5中的場景示例檢索關系數據結帳

我們有三種模式

1)用戶(具有一個role_user)

2)角色(有很多role_user)

3)RoleUser(屬於User和Role)

1)Users.php

<?php

namespace App\Models;
 use Eloquent;

class Users extends Eloquent{

    protected $table = 'users';

    public function userrole()
    {
        return $this->hasOne('App\Models\RoleUser');
    }

}

2)Roles.php

<?php

namespace App\Models;

use Eloquent;

class Roles extends Eloquent
{
    protected $table = "roles";

    public function rolesuser()
    {
        return $this->hasMany('App\Models\RoleUser');
    }

}

2)RoleUser.php

<?php

namespace App\Models;
 use Eloquent;

class RoleUser extends Eloquent{

    protected $table = 'role_user';

    public function user()
    {
        return $this->belongsTo('App\Models\Users');
    }

    public function role()
    {
        return $this->belongsTo('App\Models\Roles');
    }

}

您需要檢查數據庫與模型之間的關系和設置。 用戶在role_user表中具有一個角色。 角色在role_user表中具有許多用戶角色。 角色用戶屬於用戶和角色。 一旦在laravel /數據庫中設置了關系,就可以輕松檢索相關信息。

例如,如果要使用userrole檢索用戶,則需要編寫:

$users = \App\Models\Users::with(['userrole'])->first();

如果要獲取用戶角色名稱,則可以編寫:

$users->userrole->role->rolename; 
/* here rolename the column name you have in role table for role name*/

現在進入您的查詢:您只想選擇角色ID為12的那些用戶。現在,以雄辯的格式編寫代碼變得很容易。

$users = \App\Models\RoleUser::where('role_id', 12)->with(['user', 'role'])->get(); 
/* Here role_id is the column you have in role_user table as reference for role table */

您可以在此處了解更多信息: https : //laravel.com/docs/5.6/eloquent-relationships

要以雄辯的格式運行同一數據庫查詢,您必須執行以下操作:

  1. 您應該創建一個用戶模型,如果啟用了laravel身份驗證,則應該與您的項目一起創建該模型,您可以在此處閱讀更多內容。 如果不是,則必須創建模型。
  2. 要在控制器或類中使用模型,必須在php文件中啟用它:

    use App\\User;

  3. 像這樣運行對用戶模型的引用。

    $users = User::join('role_user','users.id', '=', 'role_user.user_id') ->join('roles', 'roles.id', '=', 'role_user.role_id') -> where('roles.id', '=', 12) ->get();

$ users現在將成為一個集合,並且受該集合可用的所有出色方法的約束。

我建議花一些時間在laracast上觀看免費的視頻教程,以真正了解Eloquent如何使用Model。 此外,最好查看可用的開箱即用驗證功能。 我傾向於使用Auth來調用角色。 希望這可以幫助。

這將提供角色ID為12的用途:

User::whereHas( 'roles', function ( $query ) {
            $query->where( 'id', 12 );
        } )->get();

我以為你建立了正確的關系。

如果您要動態傳遞$ role_id,請使用以下命令:

User::whereHas( 'roles', function ( $query ) use ($role_id) {
            $query->where( 'id', $role_id );
        } )->get();

在角色模型中,您應該添加此內容

public function users()
{
    return $this->hasMany('App\Models\User','role_id','id');
}

在控制器中

$allusrs = Role::with('users')->where('id','=','12');
dd($allusrs);

暫無
暫無

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

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