我有一个类别表和一个数据透视表,用于确定子类别。我想使用eloquent来选择所有顶级类别(没有父级的类别)。我确实想用一个雄辩的查询做到这一点,但还没有设法解决它。
数据库结构
library_categories
id
title
slug
library_category_relationships
id
parent_id
category_id
模型
class LibraryCategory extends \Eloquent {
public function children()
{
return $this->belongsToMany('LibraryCategory', 'library_category_relationships', 'parent_id', 'category_id');
}
public function parents()
{
return $this->belongsToMany('LibraryCategory', 'library_category_relationships', 'category_id', 'parent_id');
}
}
当前查询(位于存储库方法中)
$relationshipIds = DB::table('library_category_relationships')
->select('category_id')
->distinct()
->get();
// Merge with id of 0 to avoid error in the next query if no relationships are found
$relationshipIds = array_merge([0], array_fetch($relationshipIds, 'category_id'));
return $this->model
->with($this->relationships)
->orderBy($orderBy, $sort)
->whereNotIn('id', $relationshipIds)
->paginate(Config::get('intranet.pagination.per_page'));
正如您在上半部分所看到的,我从数据透视表中获取了所有唯一的类别ID,这些类别ID是子项,在第二个查询中,我从中获取的类别不在之前的结果中。
是否有可能只在一个查询中包含这个?我想把它包含在雄辩的内容中。
由于