因为这个问题我在痛苦中。
我的categories
表包含id
,slug
和parent_id
。
lessons
表,其中包含category_id
(Category
的孩子)
我希望通过Eloquent范围获取Category
父id
示例:
id=1
的父类别包含子类别{id}3
,4
和5
。然后在
Lesson
,的父类别下检索id=1
,这样就必须返回所有孩子的课程。
类别表
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);
}
答案 0 :(得分:-1)
首先将此代码放在Category
模型中:
public function scopeOfSlug($query, $slug)
{
$query->where('slug', $slug);
}
然后在您的控制器中
return Category::ofSlug($args['category'])
->lessons
->simplePaginate($page)
->shuffle();