2015-02-14 4 views
2

Я структурировал таблицу категорий для хранения категорий, а также подкатегорий.Как сделать Подзапрос для той же таблицы в Laravel Eloquent

Моя таблица структуры:

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

Как сделать следующий подзапрос с красноречивым.

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' 

ответ

2

Вы можете добавить Красноречивый отношения на той же таблице, и фильтровать его catType:

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

Это делает детей этого товара как $item->children. Вы можете получить такой счет:

$count = $item->children()->count(); 
Смежные вопросы