1

かなり複雑な $conditions のセットを作成し、Paginator を使用して検索します。

$this->Paginator->settings = array( 'conditions'=>$conditions, 
                      'joins'=>$joins, 
                      'limit'=>25,
                      //'fields' => array('DISTINCT (User.id)') 
                );
$resume_display_array = $this->Paginator->paginate('User');

'fields'がコメントアウトされていることがわかります。そのフィールドのコメントを外すと、関連付けられたモデルResumeが結果配列から削除されます (これがないと、返される各結果に [Resume] キーが含まれます。

なぜこうなった?

DISTINCT オプションを使用した SQL ダンプは次のとおりです。

SELECT DISTINCT (`User`.`id`), `User`.`id` 
FROM `sw`.`users` AS `User` 
LEFT JOIN `sw`.`taggings_users` AS `TaggingUser` 
  ON (`User`.`id`= `TaggingUser`.`user_id`) 
LEFT JOIN `sw`.`taggings` AS `Tagging` 
  ON (`TaggingUser`.`tagging_id`= `Tagging`.`id`) 
LEFT JOIN `sw`.`resumes` AS `Resume` 
  ON (`Resume`.`user_id` = `User`.`id`) 
WHERE `User`.`first_name` LIKE '%jordan%' AND NOT (`Tagging`.`tag_name` = ('done')) 
LIMIT 25  

DISTINCT オプションを指定しない場合の SQL ダンプは次のとおりです。

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role`, `User`.`created`, `User`.`modified`, `User`.`email`, `User`.`wordpress_user_id`, `User`.`first_name`, `User`.`last_name`, `User`.`group_id`, `Resume`.`id`, `Resume`.`user_id`, `Resume`.`wordpress_resume_id`, `Resume`.`wordpress_user_id`, `Resume`.`has_file`, `Resume`.`is_stamped`, `Resume`.`is_active`, `Resume`.`file_extension`, `Resume`.`created`, `Resume`.`modified`, `Resume`.`is_deleted` 
FROM `sw`.`users` AS `User` 
LEFT JOIN `sw`.`taggings_users` AS `TaggingUser` 
  ON (`User`.`id`= `TaggingUser`.`user_id`) 
LEFT JOIN `sw`.`taggings` AS `Tagging` 
  ON (`TaggingUser`.`tagging_id`= `Tagging`.`id`) 
LEFT JOIN `sw`.`resumes` AS `Resume` 
  ON (`Resume`.`user_id` = `User`.`id`) 
WHERE `User`.`first_name` LIKE '%jordan%' AND NOT (`Tagging`.`tag_name` = ('done')) 
LIMIT 25  

アップデート

の var_dump は次の$joinsとおりです。

array(
    (int) 0 => array(
        'table' => 'taggings_users',
        'type' => 'LEFT',
        'alias' => 'TaggingUser',
        'conditions' => array(
            (int) 0 => 'User.id= TaggingUser.user_id'
        )
    ),
    (int) 1 => array(
        'table' => 'taggings',
        'type' => 'LEFT',
        'alias' => 'Tagging',
        'conditions' => array(
            (int) 0 => 'TaggingUser.tagging_id= Tagging.id'
        )
    )
)
4

1 に答える 1