Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Кто сталкивался с проблемой связи модели самой с собой?
В простейшем случае если есть нечто вроде:
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. Почему такого нет в других связях я не очень то понял
Не в сети
Не знаю, поможет или нет, но https://github.com/lazychaser/cruddy тут есть self relation, в демо аппе посмотрите.
Не в сети
То есть у него свой билдер, свои клас колекций и т.п.
Без этого никак?
Уж очень иного переделывает он во фреймворке своим расширение, потом проблемы с обновлением будут...
Не в сети
Что мешает написать свой собственный scope? Например scopeHasChildren и вызывать его как Item::hasChildren().
Уважаемые.
Кто-нибудь нашел решение проблемы?
Я тут занялся разработкой плагинов под OctoberCMS на фреймворке laravel. Встретился с такой-же катавальсией:
http://octobercms.com/forum/post/relation-on-self-model
Решение со скопами не совсем подходит, по двум причинам. Я пока не совсем понял, что такое скоп и действительно ли в нем есть сила. Да и OctoberCMS использует виджеты, которые достаточно трудно поддаются изменениям (в связи с тем, что потом трудно обновлять измененный код из основного репозитория с github)... Будут ли классы Illuminate\Database использовать функцию-скоп вместо своих алгоритмов, которыми они пользуются по-умолчанию или же функция скоп вызывается пользователем вручную (вполне вероятно, что я какую-то фигню говорю, поправьте, пожалуйста)?
Страницы 1