【问题标题】:Laravel 4 resource controller show($id) method problemsLaravel 4 资源控制器 show($id) 方法问题
【发布时间】:2013-05-19 13:26:29
【问题描述】:

它必须是数据库表中的 'id' 列吗? 控制器中的 show($id)、edit($id) 方法?
我想将 $id 替换为数据库表中“post_id”列的值,但会引发错误:ModelNotFoundException
我该如何解决?

示例代码:

数据库表:

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

路线:

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

PostsController:

公共函数展示($id) { 返回视图::make('posts.show'); }

当我访问http://localhost/posts/1 它应该返回表中 id 为 1 的帖子的视图。
如果我根据表中的 post_id 值返回视图怎么办?
是否必须替换show()或中的参数?

【问题讨论】:

  • 能否添加相关代码?
  • 当然,如上添加。
  • 你并没有真正使用 $id,你只是在 show 方法中渲染视图。是的,你可以传递任何你需要的东西,你的链接只需要与资源一致:route.show 必须是http://host/route_name/id-or-anything-else。但是,如果您收到 ModelNotFoundException 是因为 FindOrFail 或 FirstOrFail 正在您的代码中的其他地方使用。我没有看到它们在 Laravel 源代码中使用,它们一定是你的。
  • 谢谢!原来 FindOrFail($id) 会在表中查找主键。在我的情况下,我可以通过将 post_id 设置为主键或使用 where ( ) 来检索帖子。你能看看与嵌套控制器相关的另一个问题吗? stackoverflow.com/questions/16633898/…

标签: php laravel laravel-4


【解决方案1】:

在您的 PostsController 中,您需要访问 Post 模型以从数据库中获取数据。

像这样: //PostsController

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

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

【讨论】:

  • 谢谢!我也找到了,因为 laravel 将 id 设置为默认主列,我也可以手动将 post_id 定义为模型中的主键,尽管不是最佳实践。
【解决方案2】:

你也可以使用查找

public function show($id) { 
$post = Post::find($id);
return View::make('posts.show', compact('post')); 
}

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2014-12-19
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多