【问题标题】:How to do Subquery for same Table in Laravel Eloquent如何在 Laravel Eloquent 中对同一张表进行子查询
【发布时间】:2015-02-14 18:18:47
【问题描述】:

我已经构建了一个类别表来存储类别和子类别。

我的表结构是:

catID (int)
catType (varchar 4)
parentID (int)
catName (varchar 50)
sOrder (int)

如何使用 Eloquent 进行以下子查询。

SELECT c.*, 
(
    SELECT COUNT(*) FROM categories AS sc WHERE sc.parentID = c.catID AND sc.catType = "Sub" 
) AS totalSubCategories
FROM categories AS c 
WHERE c.catType = 'Root' 

我尝试了以下方法,但它不起作用:

$rows = CategoryModel::from('categories as c')
        ->where('c.catType', '=', 'Root')
        ->paginate(20)
        ->select(DB::raw('c.*, (SELECT COUNT(*) FROM categories as sc WHERE sc.parentID = c.catID AND sc.catType = "Sub") AS totalCategories'));

我收到以下错误

ErrorException (E_UNKNOWN) 
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Support\Collection' does not have a method 'select'

【问题讨论】:

    标签: php mysql laravel-4 eloquent


    【解决方案1】:

    可以在同一张表上添加Eloquent关系,过滤到右边catType

    public function children() {
      return $this->hasMany('Model', 'parentID')->where('catType', 'Sub');
    }
    

    这使得该项目的子项可作为$item->children 使用。你可以得到这样的计数:

    $count = $item->children()->count();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多