Laravel收集范围

时间:2018-02-22 22:49:53

标签: php laravel

因为这个问题我在痛苦中。

问题

我的categories表包含idslugparent_id

lessons表,其中包含category_idCategory的孩子)

我希望通过Eloquent范围获取Categoryid

发布的所有课程

示例:

  

id=1的父类别包含子类别{id} 345

     

然后在Lesson的父类别下检索id=1,这样就必须返回所有孩子的课程

类别表

enter image description here

public function parent()
{
    return $this->belongsTo(self::class, 'parent_id');
}


public function lessons()
{
    return $this->hasManyThrough(
        \App\Lesson::class, \App\Category::class,
        'parent_id', 'category_id', 'id'
    );
}

//Pointless try
// public function scopeGetParent($query, $slug)
// {
//  $query->where('slug', $slug)->first()->lessons;
// }

public function children()
{
    return $this->hasMany(self::class, 'parent_id');
}

Lessons.php

                    return Lesson::recentLessons()
                    ->byParentCategory($args['category'])
                    ->simplePaginate($page)
                    ->shuffle();

如何构造scopeByParentCategory()函数??

抱歉模糊的问题!花了3个小时尝试:(

更新:我在发布问题后立即得到了这个想法,但仍然想知道您对此有何看法,以及这是处理问题的最佳方法。

    public function scopeByParentCategory($query, $slug)
{
    $ids = [];
    foreach (Category::where('slug', $slug)->first()->children as $value)
    {
        $ids[] = $value->id;    
    }

    return $query->whereIn('category_id', $ids);
}

1 个答案:

答案 0 :(得分:-1)

首先将此代码放在Category模型中:

public function scopeOfSlug($query, $slug)
{
   $query->where('slug', $slug);
}

然后在您的控制器中

return Category::ofSlug($args['category'])
                ->lessons
                ->simplePaginate($page)
                ->shuffle();