我正试图通过Eloquent从特定国家/地区获取所有用户。
问题是我得到了所有记录,where子句不起作用。
$res = User::with(array('country' => function($query) {
$query->where('country', '=', 'salope');
}))->get();
遵循laravel文档中的这种模式
$users = User::with(array('posts' => function($query)
{
$query->where('title', 'like', '%first%');
}))->get();
我的模特:
class User extends SentryUserModel {
public function country() {
return $this->belongsTo('country','country_id');
}
}
class Country extends Eloquent {
public function users() {
return $this->hasMany('users');
}
}
我做错了什么?
答案 0 :(得分:4)
我用laravel 4.1版本找到了我要找的东西。 我的问题没有正确制定。我想查询一段关系。
$posts = Post::whereHas('comments', function($q)
{
$q->where('content', 'like', 'foo%');
})->get();
所以以我的例子:
$res = User::whereHas('country', function($q) {
$q->where('country', 'salope');
})->get();
答案 1 :(得分:2)
问题是您正在检索所有用户,然后仅限制用户可以拥有的国家/地区。因此,您最终将会遇到所有用户,而不仅仅是属于Salope的用户。
我认为解决方案是向后推进。
$country = Country::where('name', 'salope')->with('users')->first();
foreach($country->users as $user)
{
echo $user->username;
}
答案 2 :(得分:1)
如果您想要特定国家/地区的用户,则需要具备相应内容的用户。
$users = Country::whereCounty('salope')->users;
dd($users);
其中users
是一个雄辩的Collection
,您循环显示Collection
并显示用户。如果您希望根据您的用户继续构建查询,请使用users()
并保持链接,例如:
$users = Country::whereCounty('salope')->users()->whereBanned(0)->get(); // Or something
dd($users);
答案 3 :(得分:1)
$matchThese = ['title' => post('title'), 'slug' => post('slug')];
return Blog::where($matchThese)->get();
类似的东西也可以
答案 4 :(得分:0)
从Laravel 5.6开始,这对我有用
我需要为用户及其角色创建一个关系。关系具有使用链接到角色表的user_roles表的枢轴键。
在我的用户模型中
public function role(){
return $this->belongsToMany('App\Roles', 'user_roles','user_id','role_id');
}
然后,我在用户模型
中创建了一个静态函数 public static function withRole($role){
$members = self::whereHas('role',function($q) use($role){
$q->where('name', '=', $role);
})->get();
return $members;
}
请注意函数中的use($role)
用法。
然后我可以使用:
$members = User::withRole('the_role_name');
希望这对某人有帮助!