Последовал руководству по основам Laravel, проблема с эпизодом 9 на MVC

#php #laravel

#php #laravel

Вопрос:

В настоящее время я просматриваю обучающие видеоролики по основам Laravel, поскольку я пробовал другой учебник раньше, но он не объяснял Laravel так подробно.

Теперь я перехожу к эпизоду 9 (https://laracasts.com/series/laravel-5-fundamentals/episodes/9 ) однако, как только я получаю доступ к show($id) функции в моем контроллере, я получаю ошибки, findOrFail() или если я просто использую find() ее, она просто ничего не запрашивает и не возвращает.

Я в значительной степени следовал руководству, кроме изменения «Статей» на «Сообщения», поскольку я предпочитал именование.

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

Я проверил весь свой синтаксис, и, похоже, все в порядке. Также запрос для Article::all(); in the index возвращает данные из моей таблицы DB.

app/Http/Controllers/PostsController.php

 <?php

namespace AppHttpControllers;

use AppPost;
use IlluminateHttpRequest;


class PostsController extends Controller
{
    public function index()
    {
        $posts = Post::all();

        return view('posts.index', compact('posts'));
    }

    public function show($id)
    {
        $post = Post::findOrFail($id);

        return view('posts.show', compact('post'));
    }
}
  

routes/web.php

 <?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', 'PagesController@index');
Route::get('contact', 'PagesController@contact');

Route::get('posts', 'PostsController@index');
Route::get('posts/{id}', 'PostsController@show');
  

app/Post.php

 <?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    protected $fillable = [
        'title',
        'body'
    ];
}
  

Ошибка, которую я получаю при использовании findOrFail()

 (2/2) NotFoundHttpException
No query results for model [AppPost] 1

in Handler.php line 131
  

Спасибо, я надеюсь, что кто-нибудь увидит, где я ошибаюсь!

Комментарии:

1. Вы установили первичный ключ таблицы post?

2. можете ли вы предоставить код блейд-файла, где находится ссылка для показа?

Ответ №1:

В моей таблице не было записи с идентификатором ‘1’

Я чувствую себя таким тупым…

Комментарии:

1. Вы получили мой голос , даже если это ошибка начинающих, вы сделали это сами! Продолжайте в том же духе и удачи! 🙂 Кстати, Google об отладке Rubber duck =)

2. Только новичок в laravel, просто нужно отметить, чтобы не использовать таблицы базы данных повторно: D

Ответ №2:

Если вы задали первичный ключ идентификатора для post таблицы :

app/Post.php

 <?php
 namespace App;
 use IlluminateDatabaseEloquentmodel;


 /**
  * 
  */
  class Post extends Model
  {

     protected $primaryKey = 'id'; 
     public $timestamps = false;
     protected $table = 'post'; //your table name
  }
  

Комментарии:

1. Все отсортировано, см. Мой комментарий

Ответ №3:

Я думаю, возможно, что ваша таблица базы данных названа неправильно. Таблица должна называться «сообщения». Если он назван как-то иначе, вам нужно объявить его в своей модели Post:

 protected $table = "name of your database table";
  

Комментарии:

1. Нет, это ничего не меняет, стоило упомянуть, что я пробовал это. Как указано, он подключается к базе данных и отображает данные в функции index(), однако find($ id) ничего не возвращает