CakePHP:如何获取与 slug 匹配的行的 ID?
Posted
技术标签:
【中文标题】CakePHP:如何获取与 slug 匹配的行的 ID?【英文标题】:CakePHP: How to get ID for a row that matches slug? 【发布时间】:2011-07-14 19:49:02 【问题描述】:我有一个名为 Posts 的模型,其中包含一个名为 slug 的字段。我想创建一个路由功能来基本上做到这一点:www.mysite.com/slug。所以,我创建了一个在 routes.php 文件中使用的 Slug 类,看起来像这样,但它并没有像我想要的那样工作:
class SlugRoute extends CakeRoute
function match($url)
App::import('Model', 'Post');
$Post = new Post();
$Post->find('first', array('conditions' => array('Post.slug' == $url)));
$id = $Post['id'];
return $id;
这是我在 routes.php 文件中的代码行:
Router::connect('/:slug', array('controller' => 'posts', 'action' => 'view'), array('routeClass' => 'SlugRoute'));
我要做的就是在我的帖子上执行搜索,以将 URL 中的输入 slug 与我数据库中的内容匹配,然后返回 ID 并自动链接到该 ID。
我做错了什么?提前致谢!!
【问题讨论】:
【参考方案1】:我发现这个示例与您正在做的事情完全相同,但使用parse
方法而不是match
方法。看看:http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp
【讨论】:
我试过了,问作者为什么不行。不幸的是,它没有,但感谢您的帮助。【参考方案2】:试试这个
$Post = new Post();
$data = $Post->find('first', array('conditions' => array('Post.slug' => $url)));
$id = $data['Post']['id'];
【讨论】:
@shota,我也试过了。这可能是正确的语法,但它也不起作用。 启用调试模式,您将看到生成了什么 SQL。这将有助于找出不正确的地方。 您收到任何错误吗?将该 SQL 复制到您的 phpmyadmin 中,看看它是否返回您需要的行 @shota,我尝试了您的新代码并收到以下错误:array_merge() [function.array-merge]: Argument #1 is not an array [CORE\cake\dispatcher.php, line 267]
Undefined index: controller [CORE\cake\dispatcher.php, line 121]
和以下“缺少控制器”错误:Error: Controller could not be found.
SQL 似乎几乎正确,但有一个斜线在那里:选择Post
.id
,Post
.slug
,Post
.title
,Post
.body
,Post
.created
5.created
56 @ FROM posts
AS Post
WHERE Post
.slug
= '/about' LIMIT 1以上是关于CakePHP:如何获取与 slug 匹配的行的 ID?的主要内容,如果未能解决你的问题,请参考以下文章
Python/postgres/psycopg2:获取刚刚插入的行的 ID