2015-06-28 3 views
0

Я пытаюсь получить имя моего проекта в своей базе данных с помощью доктрины. Вот код, я использую:Как получить имя моего проекта с доктриной

$repository = $this->getDoctrine()->getRepository('PublicBundle:Projet'); 

$query = $repository->createQueryBuilder('p') 
        ->innerJoin('p.descriptions', 'd') 
        ->getQuery(); 

$products = $query->getResult(); 

foreach ($products as &$produit) { 
    print($produit->getDescriptions()->getNom()); 
} 

Мой проект в сущности, и весь текст находится в другом:

Проект:

<?php 

namespace PublicBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Projet 
* 
* @ORM\Table(name="pt_projet"); 
* @ORM\Entity 
* @ORM\Entity(repositoryClass="PublicBundle\Entity\ProjetDepot") 
*/ 
class Projet 
{ 

    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    //ID du projet 
    protected $id; 

    /** 
    * @ORM\OneToMany(targetEntity="ProjetInt", mappedBy="projet", orphanRemoval=true) 
    */ 
    protected $descriptions; 

    /** 
    * @ORM\Column(name="pro_img", type="string", length=64, unique=true) 
    */ 
    //Nom du fichier de l'image du projet 
    protected $image; 

    /** 
    * @ORM\Column(name="pro_technologie_utilisee", type="text", length=200) 
    */ 
    //Text qui liste tout les technologies utilisées pour le projet 
    protected $technologie; 

    /** 
    * @ORM\Column(name="pro_annee", type="integer", length=4) 
    */ 
    //Année de réalisation du projet 
    protected $annee; 

    /** 
    * @ORM\ManyToOne(targetEntity="Type", inversedBy="projets") 
    * @ORM\JoinColumn(name="pro_type", referencedColumnName="id", nullable=false) 
    */ 
    //Clef étrangère du type de projet 
    //Le type de projet ne correspond pas à la catégore. Il peu être Unity, flash, image, vidéo, etc. Il permet de savoir quelle page charger pour pouvoir intégrer le projet dans le portfolio. 
    protected $type; 

    /** 
    * @ORM\Column(name="pro_fichier", type="string", length=64, unique=true) 
    */ 
    //Nom du fichier du projet 
    private $fichier; 

    /** 
    * @ORM\Column(name="pro_largeur", type="integer") 
    */ 
    //Largeur du projet 
    protected $largeur; 

    /** 
    * @ORM\Column(name="pro_hauteur", type="integer") 
    */ 
    //Hauteur du projet 
    protected $hauteur; 

    /** 
    * @ORM\ManyToMany(targetEntity="Categorie", cascade={"persist"}) 
    */ 
    //La ou les catégories du projet 
    private $categories; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->descriptions=new ArrayCollection(); 
     $this->categories=new ArrayCollection(); 
    } 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set image 
    * 
    * @param string $image 
    * @return Projet 
    */ 
    public function setImage($image) 
    { 
     $this->image = $image; 

     return $this; 
    } 

    /** 
    * Get image 
    * 
    * @return string 
    */ 
    public function getImage() 
    { 
     return $this->image; 
    } 

    /** 
    * Set technologie 
    * 
    * @param string $technologie 
    * @return Projet 
    */ 
    public function setTechnologie($technologie) 
    { 
     $this->technologie = $technologie; 

     return $this; 
    } 

    /** 
    * Get technologie 
    * 
    * @return string 
    */ 
    public function getTechnologie() 
    { 
     return $this->technologie; 
    } 

    /** 
    * Set annee 
    * 
    * @param integer $annee 
    * @return Projet 
    */ 
    public function setAnnee($annee) 
    { 
     $this->annee = $annee; 

     return $this; 
    } 

    /** 
    * Get annee 
    * 
    * @return integer 
    */ 
    public function getAnnee() 
    { 
     return $this->annee; 
    } 

    /** 
    * Set fichier 
    * 
    * @param string $fichier 
    * @return Projet 
    */ 
    public function setFichier($fichier) 
    { 
     $this->fichier = $fichier; 

     return $this; 
    } 

    /** 
    * Get fichier 
    * 
    * @return string 
    */ 
    public function getFichier() 
    { 
     return $this->fichier; 
    } 

    /** 
    * Set largeur 
    * 
    * @param integer $largeur 
    * @return Projet 
    */ 
    public function setLargeur($largeur) 
    { 
     $this->largeur = $largeur; 

     return $this; 
    } 

    /** 
    * Get largeur 
    * 
    * @return integer 
    */ 
    public function getLargeur() 
    { 
     return $this->largeur; 
    } 

    /** 
    * Set hauteur 
    * 
    * @param integer $hauteur 
    * @return Projet 
    */ 
    public function setHauteur($hauteur) 
    { 
     $this->hauteur = $hauteur; 

     return $this; 
    } 

    /** 
    * Get hauteur 
    * 
    * @return integer 
    */ 
    public function getHauteur() 
    { 
     return $this->hauteur; 
    } 

    /** 
    * Add descriptions 
    * 
    * @param \PublicBundle\Entity\ProjetInt $descriptions 
    * @return Projet 
    */ 
    public function addDescription(\PublicBundle\Entity\ProjetInt $descriptions) 
    { 
     $this->descriptions[] = $descriptions; 

     return $this; 
    } 

    /** 
    * Remove descriptions 
    * 
    * @param \PublicBundle\Entity\ProjetInt $descriptions 
    */ 
    public function removeDescription(\PublicBundle\Entity\ProjetInt $descriptions) 
    { 
     $this->descriptions->removeElement($descriptions); 
    } 

    /** 
    * Get descriptions 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getDescriptions() 
    { 
     return $this->descriptions; 
    } 

    /** 
    * Set type 
    * 
    * @param \PublicBundle\Entity\Type $type 
    * @return Projet 
    */ 
    public function setType(\PublicBundle\Entity\Type $type) 
    { 
     $this->type = $type; 

     return $this; 
    } 

    /** 
    * Get type 
    * 
    * @return \PublicBundle\Entity\Type 
    */ 
    public function getType() 
    { 
     return $this->type; 
    } 

    /** 
    * Add categories 
    * 
    * @param \PublicBundle\Entity\Categorie $categories 
    * @return Projet 
    */ 
    public function addCategory(\PublicBundle\Entity\Categorie $categories) 
    { 
     $this->categories[] = $categories; 

     return $this; 
    } 

    /** 
    * Remove categories 
    * 
    * @param \PublicBundle\Entity\Categorie $categories 
    */ 
    public function removeCategory(\PublicBundle\Entity\Categorie $categories) 
    { 
     $this->categories->removeElement($categories); 
    } 

    /** 
    * Get categories 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getCategories() 
    { 
     return $this->categories; 
    } 
} 

Вот сущность с весь текст моего проекта:

<?php 

namespace PublicBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Projet Inter 
* 
* @ORM\Table(name="pt_projet_int"); 
* @ORM\Entity 
* @ORM\Entity(repositoryClass="PublicBundle\Entity\ProjetIntDepot") 
*/ 
class ProjetInt 
{ 

    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    //ID du projet 
    protected $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Projet", inversedBy="descriptions") 
    * @ORM\JoinColumn(name="pro_id_CE", referencedColumnName="id", nullable=false) 
    */ 
    //Clef étrangère du projet associé 
    protected $projet; 

    /** 
    * @ORM\Column(name="pri_lang", type="string", length=2) 
    */ 
    //Langue de la carégorie 
    protected $langue; 

    /** 
    * @ORM\Column(name="pri_nom", type="string", length=30) 
    */ 
    //Nom du produit 
    protected $nom; 

    /** 
    * @ORM\Column(name="pri_description_cours", type="text",length=100) 
    */ 
    //Description cours du projet 
    protected $descriptionCours; 

    /** 
    * @ORM\Column(name="pri_description_complete", type="text",length=250) 
    */ 
    //Description complete du projet 
    protected $descriptionComplete; 

    /** 
    * @ORM\Column(name="pri_roles", type="string",length=60) 
    */ 
    //Roles joués dans la création du projet 
    protected $roles; 

    /** 
    * @ORM\Column(name="pri_aptitudes_developpees", type="string",length=200) 
    */ 
    //Aptitudes développées lors du projet 
    protected $aptitudesDeveloppees; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set langue 
    * 
    * @param string $langue 
    * @return ProjetInt 
    */ 
    public function setLangue($langue) 
    { 
     $this->langue = $langue; 

     return $this; 
    } 

    /** 
    * Get langue 
    * 
    * @return string 
    */ 
    public function getLangue() 
    { 
     return $this->langue; 
    } 

    /** 
    * Set nom 
    * 
    * @param string $nom 
    * @return ProjetInt 
    */ 
    public function setNom($nom) 
    { 
     $this->nom = $nom; 

     return $this; 
    } 

    /** 
    * Get nom 
    * 
    * @return string 
    */ 
    public function getNom() 
    { 
     return $this->nom; 
    } 

    /** 
    * Set descriptionCours 
    * 
    * @param string $descriptionCours 
    * @return ProjetInt 
    */ 
    public function setDescriptionCours($descriptionCours) 
    { 
     $this->descriptionCours = $descriptionCours; 

     return $this; 
    } 

    /** 
    * Get descriptionCours 
    * 
    * @return string 
    */ 
    public function getDescriptionCours() 
    { 
     return $this->descriptionCours; 
    } 

    /** 
    * Set descriptionComplete 
    * 
    * @param string $descriptionComplete 
    * @return ProjetInt 
    */ 
    public function setDescriptionComplete($descriptionComplete) 
    { 
     $this->descriptionComplete = $descriptionComplete; 

     return $this; 
    } 

    /** 
    * Get descriptionComplete 
    * 
    * @return string 
    */ 
    public function getDescriptionComplete() 
    { 
     return $this->descriptionComplete; 
    } 

    /** 
    * Set roles 
    * 
    * @param string $roles 
    * @return ProjetInt 
    */ 
    public function setRoles($roles) 
    { 
     $this->roles = $roles; 

     return $this; 
    } 

    /** 
    * Get roles 
    * 
    * @return string 
    */ 
    public function getRoles() 
    { 
     return $this->roles; 
    } 

    /** 
    * Set aptitudesDeveloppees 
    * 
    * @param string $aptitudesDeveloppees 
    * @return ProjetInt 
    */ 
    public function setAptitudesDeveloppees($aptitudesDeveloppees) 
    { 
     $this->aptitudesDeveloppees = $aptitudesDeveloppees; 

     return $this; 
    } 

    /** 
    * Get aptitudesDeveloppees 
    * 
    * @return string 
    */ 
    public function getAptitudesDeveloppees() 
    { 
     return $this->aptitudesDeveloppees; 
    } 

    /** 
    * Set projetId 
    * 
    * @param \PublicBundle\Entity\Projet $projetId 
    * @return ProjetInt 
    */ 
    public function setProjetId(\PublicBundle\Entity\Projet $projetId) 
    { 
     $this->projetId = $projetId; 

     return $this; 
    } 

    /** 
    * Get projetId 
    * 
    * @return \PublicBundle\Entity\Projet 
    */ 
    public function getProjetId() 
    { 
     return $this->projetId; 
    } 

    /** 
    * Set projet 
    * 
    * @param \PublicBundle\Entity\Projet $projet 
    * @return ProjetInt 
    */ 
    public function setProjet(\PublicBundle\Entity\Projet $projet) 
    { 
     $this->projet = $projet; 

     return $this; 
    } 

    /** 
    * Get projet 
    * 
    * @return \PublicBundle\Entity\Projet 
    */ 
    public function getProjet() 
    { 
     return $this->projet; 
    } 
} 

Когда я пытаюсь получить имя («ном») он говорит мне:

Попытка вызова метода «getNom» в классе «Doctrine \ ORM \ PersistentCollection».

ответ

0

Я нашел ответ, я забыл указать индекс описания. Вот он:

foreach ($products as &$produit) { 
    print($produit->getDescriptions()[0]->getNom()); 
} 
+1

В качестве альтернативы вы можете использовать '$ produit-> getDescriptions() -> first();'. Я не уверен, что вызывает это, если в вашем результате нет объектов '$ description', но разыменованный массив, который вы делаете выше, вызывается уведомлением' undefined offset', которое следует оперативно фатальной ошибкой «non-object» , поэтому вам, вероятно, придется справиться с этим. 'Doctrine \ ORM \ PersistentCollection' имеет метод' count() ', который должен помочь вам смягчить это. –

Смежные вопросы