В настоящее время я изучаю Laravel Eloquent и пытаюсь проверить на Artisan Tinker , с такой структурой базы данных
users
- id
- role_id
roles
- id
- name
role_features
- id
- role_id
- feature_id
features
- id
- parent_id
On * Таблица 1008 * функций , мы можем видеть, что есть parent_id , это означает, что есть основные функции и подфункции
Так что мой вопрос, возможно ли сделать что-то вроде
$ main_features = $ user-> role-> features-> main
(выше, мы Предположим, что мы уже делаем что-то вроде User :: find (1) или иначе, чтобы получить детали пользователя)
, и после получения main-features , возможно, мы делаем рекурсивный (или, может быть, другой метод), чтобы получить его подфункции ? может быть, что-то вроде
$ main_features-> sub
Я уже пробовал это на моей Feature модели, но он возвращает ошибку
public function main() {
return $this->belongsTo('App\Feature', 'parent_id')
->where(
function ($group_q) {
$group_q->whereNull('parent_id')
->orWhere('parent_id', 0);
})
->with('main');
}
public function sub() {
return $this->hasMany('App\Feature', 'parent_id')
->with('sub');
}
BadMethodCallException с сообщением 'Метод Illuminate / Database / Eloquent / Collection :: main не существует.'
До этой ошибки я мог сделать что-то вроде
$ user-> role-> features
Чтобы получить все функции этого пользователя
Я не совсем уверен, что мне нужно google
чтобы найти ответ, так как я не очень знаком с Laravel терминами.
Кстати, вот мои ссылки на источники, которые я пробовал раньше
Красноречивые отношения между родителями и детьми на той же модели
Невозможно получить и отобразить отношения внуков для динамического меню c в laravel 5.8
Итак, опять же, возможно ли сделать что-то вроде
$ main_features = $ user-> role-> features-> main
(выше, мы предполагаем, что мы уже делаем что-то вроде User :: find (1) или иначе, чтобы получить информацию о пользователе)
и после получения main-features , тогда возможно ли сделать рекурсивный (или, может быть, другой метод), чтобы получить его подфункции ? может быть, что-то вроде
$ main_features-> sub
Чего я действительно хочу достичь, так это
Функция / метод цепочки, который я могу использовать как в Artisan Tinker , так и в нормальном коде (как и предыдущие ссылки, чтобы повторить функции), поэтому мне будет проще тестировать на Artisan Tinker, Возможно ли это?
Можно ли поместить этот метод / функцию ( main или sub ) в Feature модель? Так как, я думаю, мне будет легче поддерживать код. Например, «ооо, это связано с Feature », поэтому я могу легко перемещаться, если мне нужно внести некоторые изменения / корректировки.
Заранее спасибо! :)
Обновление После тестирования вокруг, я просто понял, что может сделать это
$ role-> features-> find (1) -> sub
Который, вернет подфункции , что я ожидал раньше. На данный момент, это возможно, сделать main , и он все еще на Feature модель? Таким образом, цепочка методов может делать что-то вроде
$ user-> role-> features-> main
Еще раз спасибо!