0

したがって、以下のこのコードは次のとおりです。

    $friends = $this->find('all',
        array(
            'conditions' => array(
                'User.id' => 102
            ),
            'contain' => 'Profile'
        )
    );

このSQLを生成します:

SELECT `User`.`id`, `User`.`sForceId`, `User`.`householdId`, 
`User`.`householdSForceId`, `User`.`username`, `User`.`primaryUser`, `User`.`password`, 
`User`.`firstName`, `User`.`lastName`, `User`.`dateOfBirth`, `User`.`email`,   
`User`.`preferredEmail`, `User`.`phone`, `User`.`preferredPhone`, `User`.`homePhone`,
`User`.`workPhone`, `User`.`mobilePhone`, `User`.`ethnicity`, `User`.`ethnicityOther`,
`User`.`religion`, `User`.`religionOther`, `User`.`active`, `User`.`adminStatus`, 
`User`.`group`, `User`.`created`, `User`.`modified`, `Profile`.`id`, 
`Profile`.`userId`, `Profile`.`aboutMe`, `Profile`.`picture`, `Profile`.`created`, 
`Profile`.`modified`, `Profile`.`lat`, `Profile`.`lng` FROM `users` AS `User` LEFT JOIN
`profiles` AS `Profile` ON (`Profile`.`userId` = `User`.`id`) WHERE `User`.`id` = (102)

(あなたの脳を傷つける読書の場合はお詫びします)

このSQLコードは、同じレコードを3回選択します。理由はわかりません。どうしたの?さらに重要なことに、CakePHPコードを変更して、そのレコードを3回ではなく1回選択するにはどうすればよいですか?

役立つ場合:ユーザーbelongsToHouseholdおよびhasOneProfile。

4

1 に答える 1

3

どういうわけか、そのユーザーに対して複数のプロファイルを持つことになった場合LEFT JOIN、各プロファイルのレコードが返されるため、複数のレコードが作成されることになります。

これは、hasOneとbelongsToの関係に適用されます。これらは、LEFT JOINsを使用してデータを結合する関係だからです。

これは、データベースを手動で確認することで確認できます。SELECT * FROM profiles where profiles.userId = 102

于 2012-04-17T16:04:22.613 に答える