2013-02-12 69 views
3

简单地说:Tags HABTM DocumentsCakePHP的发现不HABTM关系记录项目

有没有办法找到所有Tags没有一个Document关联?

我已经开始与此:

$freeTags = $this->Tag->find('all', array(
      'conditions' => array(
      ), 
      'contain' => array(
       'Document' 
      ), 
      'recursive' => -1 
     )) 

,但我不知道如何得到这样的查询:

SELECT * FROM tags WHERE id NOT IN (SELECT tag_id FROM documents_tags) 

我的CakePHP的版本是2.3

编辑: 最终溶剂,Tag模型中的方法

$db = $this->getDataSource(); 
    $subQuery = $db->buildStatement(
      array(
       'fields' => array('DocumentsTag.tag_id'), 
       'table' => $db->fullTableName($this->DocumentsTag), 
       'alias' => 'DocumentsTag', 
       'limit' => null, 
       'offset' => null, 
       'joins' => array(), 
       'conditions' => null, 
       'order' => null, 
       'group' => null 
      ), $this->DocumentsTag 
    ); 
    $subQuery = ' Tag.id NOT IN (' . $subQuery . ') '; 
    $subQueryExpression = $db->expression($subQuery); 

    $conditions[] = $subQueryExpression; 

    $freeTags = $this->find('all', compact('conditions')); 
+1

试图通过这个打算:http://book.cakephp.org/2.0/en/models/retrieving -your-data.html#子查询 – Dunhamzzz 2013-02-12 17:59:23

回答

1

由于CookBook :: Subqueries你可以做

$db = $this->User->getDataSource(); 
$subQuery = $db->buildStatement(
    array(
     'fields'  => array('"DocumentsTag"."tag_id"'), 
     'table'  => $db->fullTableName($this->DocumentsTag), 
     'alias'  => 'DocumentsTag', 
     'limit'  => null, 
     'offset'  => null, 
     'joins'  => array(), 
     'conditions' => null, 
     'order'  => null, 
     'group'  => null 
    ), 
    $this->DocumentsTag 
); 
$subQuery = ' "Tag"."id" NOT IN (' . $subQuery . ') '; 
$subQueryExpression = $db->expression($subQuery); 

$conditions[] = $subQueryExpression; 

$this->User->find('all', compact('conditions')); 

我希望它可能是有益的你

+0

谢谢,像一个魅力工作 – Elwhis 2013-02-13 09:26:10