2015-11-21 5 views
0

Okey, поэтому я создаю ссылку на профиль пользователя. Мой контроллер выглядит следующим образом:Ссылка на профиль пользователя Laravel 5.1

public function show($id) 
{ 
    $user = User::whereId($id)->User::whereUsername($username)->whereActivated(true)->first(); 

    $user->access_counter++; 
    $user->save(); 

    $this->title($user->username); 
    $this->pageView('users::show', compact('user')); 
} 

Мои маршруты файл выглядит следующим образом:

ModuleRoute::get('users/{username}', '[email protected]'); 

Тогда я не собираюсь Адрес: default.com/users/test, я получил сообщение об ошибке: Нет результатов запроса для модели [Модели \ User].

Это проблема? Спасибо за ответы!

+0

Вы не смешивать идентификатор с логином, например? Пользователь 'test' существует в вашем db? –

+0

Да пользователь существует в db –

ответ

0

Проблема заключается в том, что ваш контроллер пытается найти пользователей, используя {id}, и маршрут пытается найти их с помощью {username}.

Решение 1: В вашем методе шоу в контроллере, попытаться найти пользователей по их имени пользователя и настроить код немного, что-то вроде этого:

public function show($username) 
{ 
    $user = User::whereUsername($username)->whereActivated(true)->first(); 

    $user->access_counter++; 
    $user->save(); 

    $this->title($user->username); 
    $this->pageView('users::show', compact('user')); 
} 

Решение 2:

Вы можете изменить приложение/провайдеров/метод загрузки RouteServiceProvider.php в:

public function boot(Router $router) 
{ 
    parent::boot($router); 

    $router->bind('username', 
     function ($username) 
     { 
      return \App\User::where('username', $username)->firstOrFail(); 
     } 
    ); 
} 

Тогда можно ввести-намекает модель пользователя в качестве аргумента в методе показа вашего контроллера

public function show(App\User $user) 
{ 
    return view('users.show', compact('user')); 
} 

Laravel будет связывать модели пользователя с заданным именем пользователя автоматически для вас в любом маршруте можно указать {username} заполнитель и тип- Подскажите это в методе контроллера.

Если вы привязываете, вам не нужно будет выполнять findOrFail() или whereUsername() вручную.

Если вы столкнулись с проблемами с изменениями не совершаются, попробуйте сделать: php artisan route:cache & php artisan optimize --force

+0

Спасибо! Работа с решением 1. Я не знаю, почему я не думаю об этом и делаю эту глупую ошибку. –

+0

Добро пожаловать, рад, что вы разобрали его! :) –