2010-05-10 5 views
2

J'essaie d'utiliser une requête SQL pour obtenir des données de ma base de données dans le modèle d'un projet symfony.symfony obtenir des données du tableau

ma requête:

SQL: 
SELECT l.loc_id AS l__loc_id, l.naam AS l__naam, l.straat AS l__straat, 
l.huisnummer AS l__huisnummer, l.plaats AS l__plaats, l.postcode AS l__postcode, 
l.telefoon AS l__telefoon, l.opmerking AS l__opmerking, o.org_id AS o__org_id, o.naam AS o__naam 
FROM locatie l 
LEFT JOIN organisatie o 
ON l.org_id = o.org_id 

Ceci est généré par ce DQL:

DQL: 
$this->q = Doctrine_Query::create() 
->select('l.naam, o.naam, l.straat, l.huisnummer, l.plaats, l.postcode, l.telefoon, l.opmerking') 
->from('Locatie l') 
->leftJoin('l.Organisatie o') 
->execute(); 

Mais maintenant, lorsque je tente d'acces de ces données dans le modèle soit faire:

<?php foreach ($q as $locatie): ?> 
<?php echo $locatie['o.naam'] ?> 

ou

<?php foreach ($q as $locatie): ?> 
<?php echo $locatie['o__naam'] ?> 

j'obtiens l'erreur de symfony:

500 | Internal Server Error | Doctrine_Record_UnknownPropertyException 
Unknown record property/related component "o__naam" on "Locatie" 

Est-ce que quelqu'un sait ce qui se passe mal ici? Je ne sais pas comment appeler la valeur du tableau si les noms des deux requêtes ne fonctionnent pas.

Répondre

1

Doctrine aura hydraté vos résultats en objets correspondant aux modèles de votre requête. Dans votre cas, ce sera Locatie et Organisatie. Vous devriez donc être en mesure d'accéder aux données comme suit:

<?php foreach ($q as $obj): ?> 
    <?php echo $obj->Locatie->naam; ?> 
    <?php echo $obj->Organisatie->naam; ?> 
<?php endforeach; ?> 

Si vous avez la méthode ci-dessus par exemple, la classe de table Locatie et utilisez self::create("l") pour créer votre méthode, l'objet que vous utilisez dans la vue ne sera pas nécessaire la pièce ->Locatie.

Modifier: table Exemple de méthode:

class LocatieTable extends Doctrine_Table 
{ 
    public function getLocaties() 
    { 
     $q = self::createQuery("l") 
     ->select('l.naam, o.naam, l.straat, l.huisnummer, l.plaats, l.postcode, l.telefoon, l.opmerking') 
     ->leftJoin('l.Organisatie o') 
     ->execute(); 

     return $q; 
    }  
} 

Vous devriez être en mesure de trouver cette classe (probablement vide) déjà généré automatiquement dans lib/model/doctrine/LocatieTable.class.php. appeler avec:

$this->q = Doctrine::getTable("Locatie")->getLocaties(); 
+0

Salut, merci pour votre aide, je ne peux pas le faire fonctionner, si j'essaye votre forfon symfony trows encore une erreur: propriété inconnue d'enregistrement/composant lié "Locatie" sur "Locatie" j'ai actuellement la question dans mon action. – iggnition

+0

si je supprime la première ligne et juste essayer la deuxième (organisation) je montre en effet correctement le bon nom, mais je reçois un avis/avertissement: Avis: Essayer d'obtenir la propriété de non-objet dans // emplacement du fichier // – iggnition

+0

Je vous conseille de déplacer la requête vers votre modèle Locatie et d'essayer de cette façon - en utilisant la 2ème partie de ma réponse. Faites-moi savoir si vous voulez un exemple :-) Sinon, essayez var_dump() sur les objets ($ obj) et vous verrez comment il est structuré. – richsage

0

Si vous voulez savoir comment obtenir une valeur du résultat objet DoctrineRecord je conseille d'utiliser la méthode var_dump ($ obj-> toArray()) pour obtenir vue claire de la structure de l'objet . Après cela, vous pouvez utiliser plusieurs types de getters pour récupérer ce que vous voulez (par exemple $ obj-> A-> b, $ obj-> getA() -> getB() etc ..)

+0

Merci pour votre commentaire, cela m'a aidé un problème complètement différent :) – iggnition

Questions connexes