2011-06-02 1 views
1

Après avoir travaillé dur dans mon intégration ZF/Doctrine, j'ai un problème pour "traduire" mon travail Zend_Db précédent en Doctrine. Je generate-modèles-db pour créer les modèles et je ne suis arrivé à accéder à certaines propriétés forment le point de vue, mais seulement celles qui concernent la table dont le modèle que j'ai créé comme ceci:Récupération des informations des tables associées avec Zend Framework et Doctrine 1.2

$usuarios = new Model_Users(); 
$usr = $usuarios->getTable()->findAll(); 
$this->view->show = $usr; 

Model_Users est liée à deux tables avec ce méthode:

public function setUp() 
{ 
    parent::setUp(); 
    $this->hasMany('Model_PlanillaUsers as PlanillaUsers', array(
     'local' => 'id', 
     'foreign' => 'users_id')); 

    $this->hasMany('Model_UsersHasPais as UsersHasPais', array(
     'local' => 'id', 
     'foreign' => 'users_id')); 
} 

En ce moment je suis préoccupé par UsersHasPais ... qui me dit ce que pais.pais champs et qui correspondent users.id entrées. Ceci est le Model_Pais:

abstract class Model_Base_Pais extends Doctrine_Record 
{ 
public function setTableDefinition() 
{ 
    $this->setTableName('pais'); 
    $this->hasColumn('id', 'integer', 4, array(
     'type' => 'integer', 
     'length' => 4, 
     'fixed' => false, 
     'unsigned' => false, 
     'primary' => true, 
     'autoincrement' => true, 
     )); 
    $this->hasColumn('pais', 'string', 20, array(
     'type' => 'string', 
     'length' => 20, 
     'fixed' => false, 
     'unsigned' => false, 
     'primary' => false, 
     'notnull' => true, 
     'autoincrement' => false, 
     )); 
} 

public function setUp() 
{ 
    parent::setUp(); 
    $this->hasMany('Model_UsersHasPais as UsersHasPais', array(
     'local' => 'id', 
     'foreign' => 'pais_id')); 
} 
} 

Et voici la table de jointure:

abstract class Model_Base_UsersHasPais extends Doctrine_Record 
{ 
public function setTableDefinition() 
{ 
    $this->setTableName('users_has_pais'); 
    $this->hasColumn('id', 'integer', 4, array(
     'type' => 'integer', 
     'length' => 4, 
     'fixed' => false, 
     'unsigned' => false, 
     'primary' => true, 
     'autoincrement' => true, 
     )); 
    $this->hasColumn('users_id', 'integer', 4, array(
     'type' => 'integer', 
     'length' => 4, 
     'fixed' => false, 
     'unsigned' => false, 
     'primary' => false, 
     'notnull' => true, 
     'autoincrement' => false, 
     )); 
    $this->hasColumn('pais_id', 'integer', 4, array(
     'type' => 'integer', 
     'length' => 4, 
     'fixed' => false, 
     'unsigned' => false, 
     'primary' => false, 
     'notnull' => true, 
     'autoincrement' => false, 
     )); 
} 

public function setUp() 
{ 
    parent::setUp(); 
    $this->hasOne('Model_Users as Users', array(
     'local' => 'users_id', 
     'foreign' => 'id')); 

    $this->hasOne('Model_Pais as Pais', array(
     'local' => 'pais_id', 
     'foreign' => 'id')); 
} 
} 

Maintenant ce que je veux être en mesure de récupérer, ... sinon assez clair est les champs appelés pais de la table pais qui correspond à mon ID utilisateur actuel. Comment puis-je faire cela avec Doctrine?

EDIT:

//Added to Model_Users class 


public function saveUser($user) { 
    $this->email = $user['email']; 
    $this->password = crypt($user['password'], $this->_salt); 
    $this->url = $user['url']; 
    $this->responsable = $user['responsable']; 
    $this->role = $user['role']; 
    $this->fecha = Zend_Date::now()->toString('yyyyMMddHHmmss'); 
    $id = $this->save(); 
} 


//Users table schema 
Users: 
    connection: 0 
    tableName: users 
    columns: 
    id: 
     type: integer(4) 
     fixed: false 
     unsigned: false 
     primary: true 
     autoincrement: true 
    email: 
     type: string(50) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    password: 
     type: string(250) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    url: 
     type: string(50) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    responsable: 
     type: string(50) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    role: 
     type: string(25) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    fecha: 
     type: timestamp(25) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: true 
     autoincrement: false 
    relations: 
    PlanillaUsers: 
     local: id 
     foreign: users_id 
     type: many 
    UsersHasPais: 
     local: id 
     foreign: users_id 
     type: many 

Répondre

1

Dans votre contrôleur écrire quelque chose comme un

de requête
$cu = current_user_id // you'll have to set this your self from a session variable etc 
    $q = Doctrine_Query::create() 
     ->select('p.pais') 
     ->from('Model_Pais p') 
     ->leftJoin('p.Model_UsersHasPais s') 
     ->leftJoin('s.Model_Users u') 
     ->where('u.id = ?',$cu); 
    $result = $q->fetchArray(); 
+0

@Graham Je reçois un alias 'relation inconnu Model_UsersHasPais' exception –

+0

@ la_f0ka Je suis nouveau à la cadre moi-même, vérifiez que votre journal d'erreur Apache pour ce que je l'ai vu, mais ne me souviens pas ce qui le cause. Je pense que cela peut être manquant »ou, à partir d'une ligne dans votre code de configuration du modèle, mais je ne suis pas à 100%. – Graham

+0

@ la_f0ka Ou essayez de changer la requête à leftJoin -> ('p.Model_UsersHasPais s') -> leftJoin (p.Model_Users u ') ie déposez les s avant Model_Users et remplacez par p – Graham

Questions connexes