【问题标题】:Laravel Eloquent Filter By Column of RelationshipLaravel Eloquent 按关系列过滤
【发布时间】:2014-01-15 02:44:49
【问题描述】:

使用 Eloquent ORM,我的模型设置如下:PostbelongsToManyCategory

Post.php

public function categories()
{
    return $this->belongsToMany('Category', 'posts_categories');
}

我想按类别关系的列过滤帖子。

所以我想做这样的事情:

$posts->where('categories.slug', '=', Input::get('category_slug'));

但这不起作用。

我也试过了:

$with['categories'] = function($query){ 
    $query->where('slug', '=', Input::get('category_slug'));
};

$posts::with($with)->get();

但我认为这是为了过滤类别而不是按类别过滤。

谁能给我指路?

【问题讨论】:

    标签: orm laravel-4 eloquent


    【解决方案1】:

    我现在无法访问我的 Vagrant 盒子,但我相信这应该可以:

    $posts = Post::whereHas('categories', function($q)
    {
        $q->where('slug', '=', Input::get('category_slug'));
    
    })->get();
    

    【讨论】:

    • 效果很好!不得不升级到 Laravel v4.1,因为这是一个新功能
    • 非常感谢。我花了几个小时试图解决这个问题并最终解决了它! :O
    • 正是我需要的!
    • whereHas 进行全表扫描。对于小表,如果说(类别)有 100,000 行,这很好,那么这将非常缓慢。那你怎么办呢?
    • whereHas 过滤掉非关联结果。有什么方法可以不过滤空关系结果?
    【解决方案2】:

    这是一种筛选相关模型列的快速方法:

    $allConsultants = Consultant::whereHas('user', function($query)
    {
        $query->where('is_approved', '=', 1);
    
    })->get();
    

    【讨论】:

      猜你喜欢
      • 2016-10-15
      • 1970-01-01
      • 2015-04-04
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多