在控制器方法中传递模型时,如何使用where子句在Laravel中获得结果
我有一条路线可以通过slug获得一篇文章 路线 而我希望在路由的控制器方法中传递模型 控制器 我的问题是,我怎样才能在路线上通过slug来获得帖子 而不是邮政ID 我知道我可以通过where子句通过slug并获得post在控制器方法中传递模型时,如何使用where子句在Laravel中获得结果,laravel,Laravel,我有一条路线可以通过slug获得一篇文章 路线 而我希望在路由的控制器方法中传递模型 控制器 我的问题是,我怎样才能在路线上通过slug来获得帖子 而不是邮政ID 我知道我可以通过where子句通过slug并获得post //Route Route::get('post/{slug}', 'PostController@details')->name('post.details'); //Controller method public function details($slug) {
//Route
Route::get('post/{slug}', 'PostController@details')->name('post.details');
//Controller method
public function details($slug)
{
$post = Post::with('slug', $slug)->first();
}
但是我想通过在方法中传递模型来学习同样的方法。为模型类设置路由键名称
//Post.php
公共函数getRouteKeyName()
{
返回“slug”;
}
这将通知Laravel injector/resolver在获取对象实例时查看在
slug
列中传递的变量。将路由键名称设置为模型类
//Post.php
公共函数getRouteKeyName()
{
返回“slug”;
}
这将通知Laravel injector/resolver在获取对象实例时查看在slug
列中传递的变量。您要做的是
您可以在Post模型中定义getRouteKeyName
,如下所示
<?php
class Post extends Model
{
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
}
然后在你的控制器里
public function details(Post $post)
{
// it will return post with slug name
return $post;
}
希望能有帮助
谢谢你想做的是
您可以在Post模型中定义getRouteKeyName
,如下所示
<?php
class Post extends Model
{
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'slug';
}
}
然后在你的控制器里
public function details(Post $post)
{
// it will return post with slug name
return $post;
}
希望能有帮助
谢谢控制器中的
$post
变量有什么好处?它仅仅是一个slug
字符串还是别的什么?我正在通过slug
将您的路由设置为route::get('post/{post}','PostController@details')->name('post.details')代码>和控制器方法定义为公共函数细节(Post$Post){}
,这正是我所做的。让我再一次尝试,这就是Laravel如何通过路由绑定获取模型对象。您能否尝试在控制器中使用$post
变量执行composer dump autoload
操作?它仅仅是一个slug
字符串还是别的什么?我正在通过slug
将您的路由设置为route::get('post/{post}','PostController@details')->name('post.details')代码>和控制器方法定义为公共函数细节(Post$Post){}
,这正是我所做的。让我再一次尝试,这就是Laravel如何通过路由绑定获取模型对象。您可以尝试执行composer dump autoload
不使用id有什么原因吗?Post::with('slug',$slug)->first();将始终返回posts表中的第一个条目,而与slug无关。你的意思是“where”而不是“with”?请共享posts表的迁移文件。不使用id有什么原因吗?Post::with('slug',$slug)->first();将始终返回posts表中的第一个条目,而与slug无关。你的意思是“where”而不是“with”?请共享posts表的迁移文件。感谢您的解释。一个问题。它是否只返回匹配的项目?对于这个愚蠢的问题,我感到很抱歉,但是对于拉雷维尔和route来说,这是一个新的问题。CodeLover还没有测试过,但是它相信它会返回第一个项目。谢谢你的解释。一个问题。它是否只返回匹配的项目?对于这个愚蠢的问题我很抱歉,但是对于拉雷维尔和route来说,这是一个新的问题。我很困惑。@CodeLover还没有测试过,但它相信它会返回第一个项目
public function details(Post $post)
{
// it will return post with slug name
return $post;
}