【问题标题】:Filtering Containable Model Results过滤可包含模型结果
【发布时间】:2011-10-03 20:15:08
【问题描述】:

我正在尝试使用以下代码行通过标签“谁”过滤所有具有某些(不相关)条件的帖子

$com= $this->Post->find('all', array('conditions' => $conditions, 'contain' => 'Tag.tag="who"'));

但是,结果不是只有带有标签的帖子,而是每个帖子都带有空标签数组,用于那些没有标签“谁”的帖子。

我知道我的问题之前提出过,但发布的解决方案不适用于我的代码。 我已经尝试将这里的代码调整为我自己的: http://web-development-blog.co.uk/2010/09/14/cakephp-habtm-find-with-conditions-and-containable-behavior/,但我收到一条 SQL 错误,指出在 on 子句中找不到“Tag.post_id”。

请帮忙。

尝试从所选链接实现代码时出现错误消息:

SELECT `Post`.`id`, `Post`.`title`, `Post`.`body`, `Post`.`created`,       `Post`.`modified`, `Tag`.`id`, `Tag`.`tag`, `Tag`.`created`, `Tag`.`modified` FROM `posts` AS `Post` LEFT JOIN `tags` AS `Tag` ON (`Tag`.`post_id` = `Post`.`id`) WHERE `Tag`.`tag` = 'who'    1054: Unknown column 'Tag.post_id' in 'on clause'            

这是使用这个引起的:

$this->Post->bindModel(array('hasOne' => array('Tag')));
$this->Post->contain(array(
  'Tag'
));
$com=$this->Post->find('all', array(
  'conditions'=>array('Tag.tag'=>'who') 
)); 

【问题讨论】:

  • 发布你生成的sql和结果

标签: cakephp search filter tags containable


【解决方案1】:

您的错误是您使用的是 bindModel 而没有说外键或任何东西,您应该在模型中建立关联,并在严格必要时使用这种即时方法。

您需要告诉 cake 哪个外键 not cake 将使用默认值,在您的情况下它将尝试 Tag.post_id。

你也应该使用一个有很多关联的,或者至少我是这么认为的。我这么说是因为我想一个帖子可能有多个标签。

一旦您在模型中进行关联并删除此行

$this->Post->bindModel(array('hasOne' => array('Tag')));

它应该可以完美运行

或者您可以即时使用正确的参数进行关联,为此请阅读cookbook,显示如何放置类名的示例是您所寻求的,只需添加其他属性

编辑:

抱歉,读错了... has many 关联不进行连接,因此您必须使用 contains 来指定条件或动态向关联添加条件,这是您的代码应该如何处理的用包含添加条件

$contain = array(
  'Tag' => array(
       'conditions'=> array('Tag.tag'=>'who') 
   )
);
$com=$this->Post->find('all', array(
  'contain'=>$contain 
));

记住包含条件会覆盖关联中的条件!!如果你想有额外的条件,你必须即时添加它们,例如:

$this->Post->hasMany['Tag']['conditions'] += array('Tag.tag'=>'who');

请记住,动态关联仅适用于该实例。

你也可以为不同的类型做一个hasmany别名(记住总是定义类名和外键)。

希望这次它可以工作,如果不只是评论以查看它修复;)

【讨论】:

  • 我正在使用 hasmany 关联。我认为你的建议导致了这个错误:'查询:SELECT Post.idPost.titlePost.bodyPost.createdPost .modified FROM posts AS Post WHERE Tag.tag = 'who' 1054: 'where 子句'中的未知列 'Tag.tag'
  • @user794486 哦,我看到有问题 XD img 将用解决方案编辑我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
相关资源
最近更新 更多