[Symfony] Récupérer les données d'une jointure

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Symfony] Récupérer les données d'une jointure

Re: [Symfony] Récupérer les données d'une jointure

par Ganesh » 26 mars 2010, 18:27

D'accord, je vois mieux l'architecture de la variable que j'utilise maintenant (les var_dump faisaient malheureusement planter mon navigateur).
Merci beaucoup!

Re: [Symfony] Récupérer les données d'une jointure

par stealth35 » 25 mars 2010, 23:25

ouai c'est le but de l'ORM, t'a un object avec toutes les relations dedans, imagine le CV d'une personne, avec plusieurs tables : personne, diplome, emploi (avec les relation qui vont bien)
l'object de la personne sera

Code : Tout sélectionner

personne -> nom -> prenom -> age -> diplomes -> nom -> date -> emplois -> societé -> durée
//si la gars il a 3 diplomes si tu veux afficher le 2 eme tu feras
$personne->displomes[1]

//si tu veu son age
$personne->age

//le premier emplois
$personne->emplois[0]

Re: [Symfony] Récupérer les données d'une jointure

par Ganesh » 25 mars 2010, 23:12

Je vais étudier tout ça, merci pour le lien direct vers la doc de Doctrine, j'ai beaucoup de mal à trouver ce que je cherche dedans.

Par contre, si je comprends bien ta dernière ligne ($positions->transactions...), cela signifie que les données issues de la table transaction sont contenues dans un objet imbriqué dans l'objet position; c'est bien cela?

Re: [Symfony] Récupérer les données d'une jointure

par stealth35 » 25 mars 2010, 23:02

pour recuperer tes positions tu fais ca
$this->positions = $this->positions=Doctrine_Core::getTable('position')->findAll();
apres tu parcour ton tableau type
foreach($positions as $position)
{
    print_r($positions->transactions->toArray()); //ca depen comme s'appelle ton model "transaction"
}

http://www.doctrine-project.org/documen ... ed-records

Re: [Symfony] Récupérer les données d'une jointure

par Ganesh » 25 mars 2010, 22:53

Direct, c'est-à-dire?

J'ai essayé
$position->getDateTransaction()
$position->dateTransaction;
$position->getIdTransaction()->dateTransaction

et d'autres variantes du style mais j'obtiens toujours une erreur "unknown property on position".

Re: [Symfony] Récupérer les données d'une jointure

par stealth35 » 25 mars 2010, 22:47

tu l'as direct dans ton object Doctrine

[Symfony] Récupérer les données d'une jointure

par Ganesh » 25 mars 2010, 22:28

Bonjour,

Je suis entrain de me mettre à Symfony et je me heurte à un problème tout simple: comment récupérer les donnée d'une requête utilisant une jointure?

Voici les deux tables concernées:

Code : Tout sélectionner

transaction: columns: id: { type: integer(3), primary: true, autoincrement: true } codeAction: { type: string(4), notnull: true } dateTransaction: { type: date, notnull: true } marche: { type: enum, length: 7, values: ['comptant', 'RD'], default: 'RD' } sens: { type: enum, length: 5, values: ['achat', 'vente'], default: 'achat' } quantite: { type: integer(2), notnull: true } prix: { type: float, notnull: true } fraisCourtage: {type: float, notnull: true } fraisSRD: { type: float, notnull: true } fraisProrogation: {type: float, notnull: true } relations: action: { local: codeAction, foreign: code, foreignAlias: actions } options: collate: utf8_unicode_ci charset: utf8 position: columns: id: { type: integer(3), primary: true, autoincrement: true } idTransaction: {type: integer(3), notnull: true } relations: transaction: { local: idTransaction, foreign: id, foreignAlias: transactions } options: collate: utf8_unicode_ci charset: utf8
Et les morceaux de code qui vont avec:
class positionTable extends Doctrine_Table
{
  public function getPosition() {
    $query=$this->createQuery('p')
      ->leftJoin('p.transaction t ON p.idtransaction=t.id');
    return $query->execute();
  }
}

class portefeuilleActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->positions=Doctrine_Core::getTable('position')->getPosition();
  }
}
Je n'ai aucun problème pour récupérer les données de la table position par le biais des accesseurs mais pas moyen de mettre la main sur celles de la table transaction.