从表A中选择所有ID,其中id不在数据透视表中

时间:2014-12-04 09:37:33

标签: php mysql laravel eloquent

我有一个类别表和一个数据透视表,用于确定子类别。我想使用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是子项,在第二个查询中,我从中获取的类别不在之前的结果中。

是否有可能只在一个查询中包含这个?我想把它包含在雄辩的内容中。

由于

0 个答案:

没有答案