Как получить доступ к функции, определенной в модели для просмотра? - PullRequest
0 голосов
/ 05 января 2019

Функциональность моей модели Laravel:

   public function isAdminOrSuperAdmin()
    {
        return $this->role() == config('custom_config.constants.user_types.SUPER_ADMIN') 
               || $this->role() == config('custom_config.constants.user_types.ADMIN');
    }

Я пытаюсь получить доступ к виду:

@if($user->isAdminOrSuperAdmin())
        <a class="btn btn-primary pull-right" style="margin-top: 
           -10px;margin-bottom: 5px" href="{!! route('admin.users.create') !!}">
            Add New
        </a>
@endif

но выдает ошибку:

Метод Illuminate \ Database \ Eloquent \ Collection :: isAdminOrSuperAdmin не существует. (Вид: /resources/views/admin/users/index.blade.php)

заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Проверьте ошибку:

Метод Illuminate \ Database \ Eloquent \ Collection :: isAdminOrSuperAdmin не существует. (Вид: /resources/views/admin/users/index.blade.php)

Это означает, что вы пытаетесь вызвать метод вашей модели на экземпляре Collection вместо фактического User экземпляра модели.

При запросе нескольких элементов из вашей базы данных Laravel возвращает экземпляр класса Collection, который содержит все полученные объекты модели.

Может быть, вы делаете что-то вроде этого:

public function aCoolFunction()
{
    $user = User::where('column', 'value')
                  ->get(); // <-----

    return view('my_view')->with('user', $user);
}

Метод get() возвращает Collection, а не один элемент.

Попробуйте first() вместо:

public function aCoolFunction()
{
    $user = User::where('column', 'value')
                  ->first(); // <-----

    return view('my_view')->with('user', $user);
}

Теперь, на ваш взгляд, переменная $user действительно будет содержать экземпляр вашей модели User, в которой определен метод isAdminOrSuperAdmin(), а не его набор.

0 голосов
/ 05 января 2019

Я не думаю, что это лучший способ, но вы можете передать функцию для просмотра с помощью вашего контроллера:

в вашем контроллере:

public function index(User $user)
{
    $ModelFunction = $user->yourModelFunction();
    return View('test',compact('user','ModelFunction'));
}

И в вашем представлении:

{{ $ModelFunction }}
0 голосов
/ 05 января 2019

Вы должны вызвать функцию следующим образом:

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