Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 18.04.2014 15:42:47

Eloquent ORM Models self relations

Кто сталкивался с проблемой связи модели самой с собой?
В простейшем случае если есть нечто вроде:

class Item
extends Eloquent
{
    public $timestamps = false;

    public function parent()
    {
        return $this->belongsTo('Item', 'parent_id');
    }

    public function childes()
    {
        return $this->hasMany('Item', 'parent_id');
    }

}

соответственно в таблице items id, label..., parent_id
Так вот при использовании Item::has('parent') или Item::has('childes') Получаем всегда пустой результат, так как запрос который делает система будет иметь вид

select * from `items` 
where (select count(*) from `items` where `items`.`parent_id` = `items`.`id`) >= 1

Так как нет альяса в подзапросе то мы и получаем пустой список

Кто сталкивался и нашел решение проблемы?
ЗЫ Интересно что Тайлер сделал для связи BelongsToMany решение (какое то костыльное) смотрите метод getRelationCountQuery в Illuminate\Database\Eloquent\Relations\BelongsToMany. Почему такого нет в других связях я не очень то понял

Не в сети

#2 18.04.2014 16:08:17

Re: Eloquent ORM Models self relations

Не знаю, поможет или нет, но https://github.com/lazychaser/cruddy тут есть self relation, в демо аппе посмотрите.

Не в сети

#3 18.04.2014 17:11:57

Re: Eloquent ORM Models self relations

То есть у него свой билдер, свои клас колекций и т.п.
Без этого никак?
Уж очень иного переделывает он во фреймворке своим расширение, потом проблемы с обновлением будут...

Не в сети

#4 25.04.2014 13:41:31

lazychaser

Re: Eloquent ORM Models self relations

Что мешает написать свой собственный scope? Например scopeHasChildren и вызывать его как Item::hasChildren().

#5 08.01.2015 23:57:59

Alexander Demidov

Re: Eloquent ORM Models self relations

Уважаемые.

Кто-нибудь нашел решение проблемы?

Я тут занялся разработкой плагинов под OctoberCMS на фреймворке laravel. Встретился с такой-же катавальсией:

http://octobercms.com/forum/post/relation-on-self-model

Решение со скопами не совсем подходит, по двум причинам. Я пока не совсем понял, что такое скоп и действительно ли в нем есть сила. Да и OctoberCMS использует виджеты, которые достаточно трудно поддаются изменениям (в связи с тем, что потом трудно обновлять измененный код из основного репозитория с github)... Будут ли классы Illuminate\Database использовать функцию-скоп вместо своих алгоритмов, которыми они пользуются по-умолчанию или же функция скоп вызывается пользователем вручную (вполне вероятно, что я какую-то фигню говорю, поправьте, пожалуйста)?

Подвал раздела