[英]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
要以雄辯的格式運行同一數據庫查詢,您必須執行以下操作:
要在控制器或類中使用模型,必須在php文件中啟用它:
use App\\User;
像這樣運行對用戶模型的引用。
$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.