我有三张表格如下:
ID |名称|用户名|密码
ID |名称
ID | USER_ID | ROLE_ID
这些表通过belongsToMany进行通信。 我想找到一种方法来选择“用户”表中的所有数据,除了用户值为" role_id"在表“users_roles”中是5。 我该怎么办?
答案 0 :(得分:1)
您应该使用whereDoesntHave()
选择没有符合特定条件的相关模型的模型:
$users = User::whereDoesntHave('roles', function($q){
$q->where('role_id', 5);
})->get();
答案 1 :(得分:0)
使用Laravel的查询生成器:
<?php
$users = DB::table('users')
->leftJoin('users_roles', 'user.id', '=', 'users_roles.user_id')
->where('users_roles.role_id', '!=', 5)
->get();
http://laravel.com/docs/4.2/queries
或直接使用Eloquent:
<?php
$users = User::whereHas('users_roles', function($q)
{
$q->where('role_id', '!=', 5);
})->get();
答案 2 :(得分:0)
<?php
$users = User::whereHas('roles', function($query) {
$query->where('id', '<>', 5);
})
->orHas('roles','<', 1)
->get();
答案 3 :(得分:0)
我认为正确答案是:
User::whereHas('roles', function ($query) {
$query->whereId(5)
}, '=', 0)->get();
此代码应发送一个查询,以检查role
id=5
是否与user
相关。
虽然我认为这应该有效,但@lukasgeiter的答案更可取。
最后,两种方法都使用has()
通过使用db query where clause
中的子查询来计算相关模型,但是当您使用whereDoesntHave()
时,它指定运算符<
和计数1
本身。
您可以在var_dump(DB::getQueryLog())
的回调中App::after()
查看实际查询。