Zaczełem ostatnio swoją przygode z CakePHP, chcę napisać prostą aplickacje do wymiany gier między użytkownikami.
Mam tabele users - każdy user może mieć kilka platform.
Mam również tabele userGames - do każdej z gier przypisana jest jedna platforma.
No i oczywiście tabela platforms - w której zpisana jest nazwa i id platformy.
Plus do tego tablica asocjacji wiele do wielu platforms_users - która ma pola id, platform_id, user_id
Oczywiście mam utworzone za pomocą piekarni modele. Wydaje mi się że wszystkie asocjacje są w porzadku.
Teraz mój problem polega na tym że chciałbym wylistować metoda find('list') wszystkie platformy które należą do użytkownika o id 1.
Więc na chłopski rozum zapytanie:
SELECT platforms.name, platforms.id FROM platforms LEFT JOIN platforms_users ON platforms_users.platform_id=platforms.id WHERE platforms_users.user_id=1
Działa idealnie w phpmyadminie.
Tylko jak teraz to zrobić w cake?
Próbowałem już wszystkiego...
Między innymi:
Kontroler users
I kilka takich kombinacji, również w kontrolerze platforms...
Ale za nic nie mogłem tego wybrać...
Proszę o pomoc...
Załączam modele
class Platform extends AppModel { public $displayField = 'name'; 'className' => 'UserGame', 'foreignKey' => 'platform_id', 'conditions' => '', 'fields' => '', 'order' => '' ) ); 'className' => 'User', 'joinTable' => 'platforms_users', 'foreignKey' => 'platform_id', 'associationForeignKey' => 'user_id', 'unique' => 'keepExisting', 'conditions' => '', 'fields' => '', 'order' => '', 'limit' => '', 'offset' => '', 'finderQuery' => '', 'deleteQuery' => '', 'insertQuery' => '' ) ); }
class User extends AppModel { /** * Display field * * @var string */ public $displayField = 'name'; //The Associations below have been created with all possible keys, those that are not needed can be removed /** * hasMany associations * * @var array */ 'className' => 'UserGame', 'foreignKey' => 'user_id', 'dependent' => false, 'conditions' => '', 'fields' => '', 'order' => '', 'limit' => '', 'offset' => '', 'exclusive' => '', 'finderQuery' => '', 'counterQuery' => '' ), 'className' => 'Friendship', 'foreignKey' => 'user_from' ), 'className' => 'Friendship', 'foreignKey' => 'user_to' ), 'className' => 'Message', 'foreignKey' => 'user_from' ), 'className' => 'Message', 'foreignKey' => 'user_to' ) ); 'className' => 'User', 'joinTable' => 'friendships', 'foreignKey' => 'user_from', 'associationForeignKey' => 'user_to' ), 'className' => 'User', 'joinTable' => 'messages', 'foreignKey' => 'user_from', 'associationForeignKey' => 'user_to' ), 'className' => 'Platform', 'joinTable' => 'platforms_users', 'foreignKey' => 'user_id', 'associationForeignKey' => 'platform_id', 'unique' => 'keepExisting', 'conditions' => '', 'fields' => '', 'order' => '', 'limit' => '', 'offset' => '', 'finderQuery' => '', 'deleteQuery' => '', 'insertQuery' => '' ) ); $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); } return true; } public function getFriends($idToFind) { ) ) ) ); foreach ($data as $i) { if ($i['FriendFrom']['user_from'] == $idToFind) { $friendslist[] = $i['UserTo']; } elseif ($i['FriendFrom']['user_to'] == $idToFind) { $friendslist[] = $i['UserFrom']; } } //die(debug($friendslist)); } public function getPlatforms($user_id){ )); 'conditions'=>array( 'User.id'=>$user_id ) )); return $platforms; } }
class UserPlatform extends AppModel { 'className' => 'User', 'foreignKey' => 'user_id', 'conditions' => '', 'fields' => '', 'order' => '' ) ); }