Функция показа модели Laravel, возвращающая ноль - PullRequest
0 голосов
/ 30 апреля 2018

У меня установлена ​​Laravel 5.6 и настроена множественная аутентификация.

Все работает, за исключением того, что когда я захожу в функцию показа ресурсов, eloquent не получает запись. Просто возвращаю ноль.

У меня есть поиск в Google в течение 2 дней, и я просто не могу понять.

Код следующий.

web.php

Route::get('/', function () {
return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::get('/user/logout','Auth\LoginController@userLogout')->name('user.logout');

//admin route for our multi-auth system

Route::prefix('admin')->name('admin.')->group(function () {
    Route::get('/', 'AdminController@index')->name('dashboard');
    Route::get('/login', 'Auth\AdminLoginController@showLoginForm')->name('login');
    Route::post('/login', 'Auth\AdminLoginController@login')->name('login.submit');
    Route::get('/logout','Auth\AdminLoginController@logout')->name('logout');

    //admin password reset routes
    Route::post('/password/email','Auth\AdminForgotPasswordController@sendResetLinkEmail')->name('password.email');
    Route::get('/password/reset','Auth\AdminForgotPasswordController@showLinkRequestForm')->name('password.request');
    Route::post('/password/reset','Auth\AdminResetPasswordController@reset');
    Route::get('/password/reset/{token}','Auth\AdminResetPasswordController@showResetForm')->name('password.reset');

});

Route::resource('/admin/stock_categories','Admin\Stock\CategoryController');

Ресурс, с которым я работаю, это stock_categories выше.

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

|        | POST      | admin/stock_categories                       | stock_categories.store   | App\Http\Controllers\Admin\Stock\CategoryController@store                   | web,auth:admin                               |
|        | GET|HEAD  | admin/stock_categories                       | stock_categories.index   | App\Http\Controllers\Admin\Stock\CategoryController@index                   | web,auth:admin                               |
|        | GET|HEAD  | admin/stock_categories/create                | stock_categories.create  | App\Http\Controllers\Admin\Stock\CategoryController@create                  | web,auth:admin                               |
|        | GET|HEAD  | admin/stock_categories/{stock_category}      | stock_categories.show    | App\Http\Controllers\Admin\Stock\CategoryController@show                    | web,auth:admin                               |
|        | PUT|PATCH | admin/stock_categories/{stock_category}      | stock_categories.update  | App\Http\Controllers\Admin\Stock\CategoryController@update                  | web,auth:admin                               |
|        | DELETE    | admin/stock_categories/{stock_category}      | stock_categories.destroy | App\Http\Controllers\Admin\Stock\CategoryController@destroy                 | web,auth:admin                               |
|        | GET|HEAD  | admin/stock_categories/{stock_category}/edit | stock_categories.edit    | App\Http\Controllers\Admin\Stock\CategoryController@edit                    | web,auth:admin         

Когда я показываю список, он отображается правильно.

Но когда я нажимаю на элемент и открываю URL

/admin/stock_categories/1

Возвращает пустой результат. Я не показываю предмет.

Код моей модели выглядит следующим образом.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;


class Category extends Model
{
    use Notifiable;

    protected $table = 'stock_categories';
    //protected $fillable = ['name, discount'];

    //
    function items() {
      return $this->hasMany('App\Item','category_id');
    }

}

Мой контроллер имеет следующий код.

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('auth:admin');
}


/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    $category = Category::where('master_category_id',0)->orderBy('name')->paginate(20);
    $master_category_id = 0;
    return view('admin.stock.top_list',compact('category','master_category_id'));
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    //
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //
}

/**
 * Display the specified resource.
 *
 * @param  \App\Category  $category
 * @return \Illuminate\Http\Response
 */


public function show(Category $category)
{
    return view('admin.stock.category',compact('category'));
}

Когда я var_dump ($ category) внутри функции show, я получаю это.

object(App\Category)#755 (26) {
  ["table":protected]=>
  string(16) "stock_categories"
  ["connection":protected]=>
  NULL
  ["primaryKey":protected]=>
  string(2) "id"
  ["keyType":protected]=>
  string(3) "int"
  ["incrementing"]=>
  bool(true)
  ["with":protected]=>
  array(0) {
  }
  ["withCount":protected]=>
  array(0) {
  }
  ["perPage":protected]=>
  int(15)
  ["exists"]=>
  bool(false)
  ["wasRecentlyCreated"]=>
  bool(false)
  ["attributes":protected]=>
  array(0) {
  }
  ["original":protected]=>
  array(0) {
  }
  ["changes":protected]=>
  array(0) {
  }
  ["casts":protected]=>
  array(0) {
  }
  ["dates":protected]=>
  array(0) {
  }
  ["dateFormat":protected]=>
  NULL
  ["appends":protected]=>
  array(0) {
  }
  ["dispatchesEvents":protected]=>
  array(0) {
  }
  ["observables":protected]=>
  array(0) {
  }
  ["relations":protected]=>
  array(0) {
  }
  ["touches":protected]=>
  array(0) {
  }
  ["timestamps"]=>
  bool(true)
  ["hidden":protected]=>
  array(0) {
  }
  ["visible":protected]=>
  array(0) {
  }
  ["fillable":protected]=>
  array(0) {
  }
  ["guarded":protected]=>
  array(1) {
    [0]=>
    string(1) "*"
  }
}

Мое промежуточное ПО выглядит так.

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,

        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

Я надеюсь, что я совершил нечто глупое, и за свою жизнь я не могу найти.

Таким образом, чтобы подвести итог, я нажимаю на элемент, загружаю маршрут показа ресурса, но элемент не извлекается из базы данных.

Любая помощь с благодарностью.

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я думаю, вы должны искать Model Binding. Здесь приведены некоторые ресурсы, показывающие, как передать объект Model в контроллер.

  1. Документация по привязке модели маршрута
  2. Некоторые примеры
  3. SO

Я надеюсь, что это поможет вам найти некоторые подсказки.

0 голосов
/ 30 апреля 2018

Я думаю, вам нужно будет использовать идентификатор, отправленный в вашем маршруте, чтобы получить категорию.

например.

public function show($id)
{
    $category = Category::find($id);

    return view('admin.stock.category',compact('category'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...