Laravel Красноречивый метод Цепи на Artisan Tinker - PullRequest
0 голосов
/ 20 апреля 2020

В настоящее время я изучаю 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

Чего я действительно хочу достичь, так это

  1. Функция / метод цепочки, который я могу использовать как в Artisan Tinker , так и в нормальном коде (как и предыдущие ссылки, чтобы повторить функции), поэтому мне будет проще тестировать на Artisan Tinker, Возможно ли это?

  2. Можно ли поместить этот метод / функцию ( main или sub ) в Feature модель? Так как, я думаю, мне будет легче поддерживать код. Например, «ооо, это связано с Feature », поэтому я могу легко перемещаться, если мне нужно внести некоторые изменения / корректировки.

Заранее спасибо! :)

Обновление После тестирования вокруг, я просто понял, что может сделать это

$ role-> features-> find (1) -> sub

Который, вернет подфункции , что я ожидал раньше. На данный момент, это возможно, сделать main , и он все еще на Feature модель? Таким образом, цепочка методов может делать что-то вроде

$ user-> role-> features-> main

Еще раз спасибо!

1 Ответ

0 голосов
/ 23 апреля 2020

для тех, кто ищет ответ на этот конкретный вопрос.

Вы можете go здесь по этой ссылке . Это ссылка, где я задаю тот же вопрос на форуме Laracast.

На всякий случай, ссылка устарела или устарела, или веб-сайт как-то не работает или недоступен, вот небольшая часть ответа, которая приводит меня к решению этого конкретного вопроса.

Есть посмотрите на это сообщение в блоге Тима Макдональда, где он расширяет класс коллекций для создания своих собственных коллекций. https://timacdonald.me/giving-collections-a-voice/

Престижность этого пользователя - Хэнли , за то, что он привел меня к ответу! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...