laravel Eloquent where where子句

时间:2013-11-14 12:34:50

标签: laravel eloquent

我正试图通过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');
    }

}

我做错了什么?

5 个答案:

答案 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();

Documentation link

答案 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');

希望这对某人有帮助!