【问题标题】:CakePHP conditional findCakePHP 条件查找
【发布时间】:2013-09-04 22:29:07
【问题描述】:

我正在编写一个简单的博客应用程序。我正在处理两个模型,BlogPostBlogCategory

它们都使用单独的表彼此具有 HABTM 关系。

我在 BlogPost 模型中编写了一个函数来加载某个类别的所有帖子,但它不断产生数据库错误。

public function getRecentFromCategory($category, $offset, $limit){
     return $this->find('all', array(
         'order' => 'BlogPost.date desc',
         'offset' => $offset,
         'limit' => $limit,
         'conditions' => array('BlogCategory.id' => $category)
     ));
 }

为什么我不能根据关联的类别制作条件?

【问题讨论】:

  • 它显示了查询,但显然它实际上并没有链接到查询中的 BlogCategory。它只是突然有一个 WHERE BlogCategory.id=etc,但它从未建立关系。
  • 我只是觉得像在相关模型中搜索这样简单的事情应该比这更简单。这真的是唯一的方法吗?
  • AFAIK 不幸的是,如果您想使用 Cake 语法,这是唯一的方法。

标签: php mysql cakephp models model-associations


【解决方案1】:

您需要在模型之间建立belongsTo 关系,这意味着您的 BlogPost 可以属于 BlogCategory。

假设您的 BlogPost 在您的 BlogPost 模型中有一个“blog_category_id”字段:

public $belongsTo = array(
    'BlogCategory' => array(
        'className' => 'BlogCategory',
        'foreignKey' => 'blog_category_id'
    )
);

那么您的查找应该能够以您想要的方式根据类别进行过滤。

【讨论】:

  • HABTM 关系中,外键位于连接表中,因此无法创建belongsTo 关系。
  • 我的错,我没有看到他帖子中的 HABTM 部分。但是同样的事情,您将使用这样的语法(如您在 OP cmets 中发布的书籍链接中所述),并设置您的连接表。
猜你喜欢
  • 2011-10-22
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多