Использую пакет franzose/ClosureTable (в частности для иерархической категории товаров) для мультиязычного сайта на Laravel 5.1.
Проблема в том что не могу получить категории для определенного языка. Например для
$category->getRoots()
извлекает все родительские категории, но не для определенного языка.
Хотелось бы сделать так
$category->lang()->getRoots()
, которое возвращал все родительские категории для определенного языка.
Сам смог реализовать такое (но не работает).
К стандартному миграционному файлу, которое генерируется пакетом franzose/ClosureTable добавил две столбцы:
$table->string('name');
$table->enum('lang', ['ru', 'en'])->default('ru');
А к модели добавил:
public function scopeLang($query)
{
$lang = \App::getLocale();
return $query->where('lang', $lang);
}
Но это не помогает, если использовать так
$category->lang()->getRoots()
, выдает ошибку:
Call to undefined method Franzose\ClosureTable\Extensions\QueryBuilder::getRoots()
а если так
$category->getRoots()->lang()
:
Call to undefined method Franzose\ClosureTable\Extensions\Collection::lang()
Но если на прямую задать условия так
$categories->getRoots()->where('lang', 'ru')
, тогда работает.
И наконец вопрос как реализовать конструкцию вида $category->lang()->getRoots()
и для методов Ancestors, Direct descendants (children), Descendants, Siblings? Чтобы фильтровал данные по определенному языку.
Пробовал сам разобраться через исходника пакета, но ума не хватает куда что писать...