2014-10-22 5 views
0

Ну, у меня есть эта таблица в моей базе данных:Laravel Самостоятельное отношений

CREATE TABLE categories(
id INT, 
name VARCHAR, 
id_parent INT, 
CONSTRAINT fk_categories FOREIGN KEY(id_parent) REFERENCES categories(id) 
); 

В Laravel Категория модели, у меня есть это:

class Category extends Eloquent 
{ 
    protected $table = "categories"; 

    public function parentCategory(){ 
     return $this->belongsTo("Category","id_parent"); 
    } 

    public function subCategories(){ 
     return $this->hasMany("Category","id_parent"); 
    } 
} 

Также у меня есть эти данные:

id  name   id_parent 
1   category_1 NULL 
2   category_2 NULL 
3   category_3 1 
4   category_4 1 
5   category_5 2 

Когда я звоню в контроллер:

count(Category::with("subCategories")->get()); The count returns 5. 

И когда я звоню в контроллере:

count(Category::has("subCategories")->get()); The count returns 0. 

Все это плохо, потому что я хочу только те категории, которые parent_id = NULL, то будет возвращать к графе 3.

Если я использую count(Category::where("id_parent","!=","NULL") результат равен 3 (это нормально), но я хочу получить этот результат с помощью функции HAS или WITH.

Итак, как я могу это сделать без использования функции «где»?

Извините за мой английский.

+0

Сколько таблиц и моделей у вас здесь? Я вижу таблицу категорий, другую таблицу ('category'?) И не менее 2 модели 'Category' и' PropertyCategory', и вы спрашиваете о самостоятельности. Думаю, я не понимаю вашу структуру и то, что вы хотите достичь. –

+0

Oh !! sorry , Я изменил все ошибки. Модель - это категория, а таблица, на которую ссылаются, - это категории. Я выразился так, как вы видите, потому что laravel говорит, что вы должны назвать свои таблицы во множественном числе, а его модель - единственной. – Developer

+0

Вам следует рассмотреть возможность использования https://github.com/etrepat/baum. – ceejayoz

ответ

0

Предполагая, что ваши ошибки в коде ошибки копипаст (в одних местах у вас есть parent_id и в других id_parent вы не можете сделать это с помощью has.

Это кажется ошибка для меня, потому что неправильный запрос выполняется. Я создал Github issue для этого, я видел, по крайней мере, аналогичную проблему.

+0

Я изменил его в другой раз. Даже как сейчас, я не могу использовать имеет ?? Что я должен изменить? – Developer

+0

@Developer Я не эксперт, но кажется, что если отношение для одной таблицы, при использовании '' 'неправильного запроса создается, поэтому вы всегда будете получать 0 записей. Посмотрите на проблему github, которую я создал, чтобы увидеть точную проблему –

Смежные вопросы