首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取在关系中具有特定值的模型

获取在关系中具有特定值的模型
EN

Stack Overflow用户
提问于 2018-07-12 23:51:29
回答 1查看 35关注 0票数 0

我正在尝试根据给定的类别过滤“活动”,活动的类别是由belongsToMany关系给定的。

是否可以将活动过滤为只允许在数组$categories中包含(或不包含)类别的活动?

在主要搜索SO之后,我了解到'line‘函数可以在with语句中执行,我尝试使用'wherePivotIn’修饰符,认为它会过滤列表中的透视图'id_category‘,但我在$categories上得到了一个未定义的变量错误。

如果这不起作用,有没有一个好的解决方案来根据它的关系来过滤模型?

在控制器内部

代码语言:javascript
复制
public function get_activity_cat($categories_db){

    $categories = [];    
    foreach (json_decode($categories_db) as $key => $value) {
       array_push($categories, $value->id);
    }

    return Activity::select('id', 'name_spa', 'name_eng', 'price')
                   ->with('covers')
                   ->with('languages')
                   ->with([ 'categories' => function($query){ $query->wherePivotIn('id_category', $categories); } ])
                   ->get()
                   ->toJson()
    ;

}

我的模型

代码语言:javascript
复制
class Activity extends Model
{
    protected  $primaryKey = 'id';
    public function covers()
    {
        return $this->belongsToMany('App\Cover', 'activities_covers', 'id_activity', 'id_cover')
                    ->select(array('id', 'name_spa', 'name_eng'));
    }

    public function languages()
    {
        return $this->belongsToMany('App\Language', 'activities_languages', 'id_activity', 'id_language')
                    ->select(array('id', 'id_lang', 'lang_name'));
    }

    public function categories()
    {
        return $this->belongsToMany('App\Category', 'activities_categories', 'id_activity', 'id_category');
    }
}

编辑--

感谢LC Yoong的评论,未定义的变量错误被解决了,但我没有解决的办法。

该方法只过滤关系的结果,但当透视不在$categories数组中时,它不排除'activity‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 04:37:11

您可以使用whereHas根据关系条件缩小结果范围。试试这个:

代码语言:javascript
复制
return Activity::select('id', 'name_spa', 'name_eng', 'price')
        ->whereHas('categories', function($q) use ($categories ){
            $q->whereIn('id', $categories);
        })
        ->with(['covers', 'languages', 'categories'])
        ->get()
        ->toJson();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51309921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档