CakePHP 3查找没有关联记录的记录(hasMany)

时间:2016-04-20 08:16:35

标签: associations cakephp-3.0 has-many

我有Products hasMany Tasks

查找任务表中没有关联记录的所有产品的最佳方法是什么?

我试过了:

$query->matching('Tasks', function ($q) {
return $q->where(['Tasks.product_id' => NULL});

但这似乎没有成功。

2 个答案:

答案 0 :(得分:4)

我建议您使用子查询

这是找到所有没有关联记录的产品的最简单方法。 试试这个:

    $matchingTasks= $this->Products->association('Tasks')->find()
        ->select(['product_id'])// id of product in Tasks Table
        ->distinct();

    $query = $this->Products->find()
        ->where(['id NOT IN' => $matchingTasks]);
    // to debug the result
      foreach($query as $product){
        debug($product);
    }
    die();

答案 1 :(得分:3)

正如Greg Schmidt所写:notMatching是解决方案:

$query = $articlesTable->find()->notMatching('Tags');

$query = $articlesTable
->find()
->notMatching('Tags', function ($q) {
    return $q->where(['Tags.name' => 'boring']);
});