UsersController `User :: all ()` работает, но `show` возвращает` null` - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу получить пользователя на основе id, но он возвращает null, но User::all() работает правильно.

index и show методы в UsersController: -

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use DB;

class UsersController extends Controller
{
public function __construct()
{
    $this->middleware('auth',['except'=>['index','show']]);
}

public function index()
{
    $users=User::all();
    return view('dev.index')->with('users',$users); 
}

public function show(User $user)
{   
    return view('dev.show')->with('user',$user);
}


}

Маршрут: -

Route::resource('devs','UsersController');

На экране у меня есть {{dd($user->name)}}, и он возвращает null по URL public/devs/{dev}.

но работает нормально на index на URL public/devs

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Это потому, что вы определяете свой базовый маршрут следующим образом:

Route::resource('devs', 'UserController');

Это означает, что laravel отформатирует метод show следующим образом:

Route::get('devs/{dev}', 'UserController@show');

Laravel попытается решить эту зависимость doind Неявное связывание модели и, учитывая, что {dev} не соответствует ни одному из определенных вами классов модели, оно действительно вернет null.

Таким образом, чтобы решить эту проблему, определите это соответствие явно, выполнив Явное связывание . Для этого перейдите на:

App / Поставщики / RouteServiceProvider.php

public function boot()
{
    parent::boot();

    Route::model('dev', App\User::class);
}

Так что теперь, когда Laravel считывает параметр маршрута {dev}, он сопоставляется с моделью User.

0 голосов
/ 09 ноября 2018

Вы не инициализируете пользователей для всего вашего контроллера. Каждая функция использует свои собственные переменные

Прежде всего, я бы изменил ваш маршрут так:

Route::get('devs', 'UsersController@show')->name('showUsers')

В вашей функции я бы сделал следующее

public static function show(){
   $id = 1;
   $users = User::where('id', $id')
   return view('dev.show', compact('users'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...