2013-05-19 3 views
0

Должен ли быть столбец 'id' в таблице базы данных, который отлично работает для show ($ id), редактировать ($ id) метод в контроллере?
Я хочу заменить $ ID со значением «POST_ID» столбец в таблице базы данных, но он выдает ошибку: ModelNotFoundException
Как я могу это исправить?

Пример кода:

таблица базы данных:

id(int), post_id(varchar32), post_title(varchar32), post_content(text)

маршруты:

Route::resource('posts', 'PostsController');

PostsController:

public function show($id) { return View::make('posts.show'); }

Когда я посещаю http://localhost/posts/1 он должен вернуть вид сообщения, который имеет id 1 в таблице.
Что делать, если мне нужно вернуть представление на основе post_id значение в таблице?
Нужно ли заменять параметр в show() или?

+0

пожалуйста, вы можете добавить соответствующий код? – Chris

+0

уверен, добавлено как указано выше. – JackpotK

+3

Вы действительно не используете $ id, вы просто визуализируете представление в методе show. И да, вы можете передать все, что вам нужно, ваши ссылки должны соответствовать ресурсу: route.show должен быть http: // host/route_name/id-or-anything-else'. Но если вы получаете ModelNotFoundException, это потому, что FindOrFail или FirstOrFail используются где-то еще в вашем коде. Я не вижу, чтобы они использовались в исходном коде Laravel, они должны быть вашими. –

ответ

1

В вашем почтовом диспетчере вам нужно получить доступ к модели Post, чтобы получить данные из db.

так: // PostsController

public function show($id) { 
$post = Post::where('post_id', $id)->first(); 

return View::make('posts.show', compact('post')); 
} 
+0

Спасибо, я также нашел его с laravel set id как основной по умолчанию столбца, я также могу вручную определить post_id как первичный ключ в модели, хотя это и не лучшая практика. – JackpotK

0

вы также можете использовать найти

public function show($id) { 
$post = Post::find($id); 
return View::make('posts.show', compact('post')); 
} 
Смежные вопросы