用户迁移:
/**
* Users
*/
Schema::create('users', function(Blueprint $t) {
$t->increments('id');
$t->string('email', 100)->unique();
$t->string('password', 60);
$t->string('firstname', 30);
$t->string('lastname', 30);
$t->string('company', 60)->nullable();
$t->string('phone')->nullable();
$t->rememberToken();
$t->timestamps();
});
角色迁移:
Schema::create('roles', function(Blueprint $t) {
$t->increments('id');
$t->string('name', 30)->unique();
});
数据透视表:
Schema::create('role_user', function(Blueprint $t) {
$t->increments('id');
$t->integer('role_id')->unsigned()->index();
$t->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$t->integer('user_id')->unsigned()->index();
$t->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
关系工作正常,但我需要检索所有具有特定角色的用户的列表,让我们说" Agent"
最终我想将此用户列表添加到Form :: select中,因此我只需要users表中的 id,firstname,lastname 字段。
好的,在输入所有内容之后,我想出来了。想要提交,以防其他人觉得它有用,或者给我一个更好的方法。以下是:
我首先将此添加到用户模型:
public function getFullNameAttribute() { 返回$ this->属性[' firstname']。 ' ' 。 $这 - >属性['姓']; }
然后我收到准备控制器中的数据:
$agents = User::select('firstname', 'lastname', 'id')->with(['roles' => function($query) {
$query->where('name', 'Agent');
}])->get();
$agentsList = $agents->lists('fullName', 'id');
这似乎有效,但我不确定它是否是一种处理它的正确方法。该页面很少被使用,因此性能不会太重要。
答案 0 :(得分:2)
您可以试试这个,whereHas
只会获取name=Agent
但会获取所有内容的人:
$agents = User::whereHas('roles', function($query) {
$query->where('name', 'Agent');
})->get(['firstname', 'lastname', 'id'])->lists('fullName', 'id');