Symfony Doctrine : obtenir la valeur du champ dans la boucle foreach sur fetchAll()
Je suis en train de l'affichage de certains champs d'une table "Post" à l'aide d'un raw requête :
$connection = $em->getConnection();
$statement = $connection->prepare("SELECT * FROM Post WHERE category_id = 1");
$statement->execute();
$posts = $statement->fetchAll();
...
foreach($posts as $post) {
$xml .= $post->getId();
$xml .= $post->getTitle();
$xml .= $post->getContent();
}
J'ai une erreur "FatalErrorException: Erreur: Appel à un membre de la fonction getId() sur un non-objet dans ..."
Toutes ces méthodes sont à droite dans mon Post de l'entité. Toute suggestion au sujet de ce que je fais mal ?
[MODIFIER]
$em = $this->getDoctrine()->getManager();
$post_repository = $em->getRepository('MyBundle:Post');
$posts = $post_repository->findBy(array('category_id' => 1));
foreach($posts as $post) {
$xml .= $post->getTitle();
}
Me renvoie "non reconnu champ: category_id".
Mon Post de classe :
class Post
{
/**
* @ORM\ManyToOne(targetEntity="MyBundle\Entity\Category", inversedBy="post")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
* })
*/
private $category;
/**
* Set category
*
@param MyBundle\Entity\Category $category
*/
public function setCategory(\MyBundle\Entity\Category $category)
{
$this->category = $category;
}
/**
* Get category
*
@return MyBundle\Entity\Category
*/
public function getCategory()
{
return $this->category;
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
....
Sans doute votre sql est (ou sera) plus complexe que le code que vous avez donné ici, comme avec symfony/doctrine premières requêtes sont rarement utilisés lorsque le niveau plus élevé des mécanismes sont insuffisants. Un simple repository->findBy() suffirait pour cela de sql
Pourquoi utilisez-vous cru sql pour des cas aussi simples?
Pourquoi utilisez-vous cru sql pour des cas aussi simples?
OriginalL'auteur | 2013-11-04
Vous devez vous connecter pour publier un commentaire.
Pourquoi utiliser directement votre connexion ici? Vous devriez envisager d'utiliser l'entité référentiel pour vos "posts" de la classe. Par exemple :
cela devrait fonctionner, il suffit de remplacer le
YourBundle:Post
avec le bon paquet et les noms de classe. De même pour lecategory_id
, je ne peux pas deviner sans votre mise en œuvre, s'il est la propriété de la classe ou le nom de mappage.Je vous suggère de lire plus sur la Doctrine officielle de la documentation pour améliorer vos connaissances sur le sujet.
Ensuite, vous pouvez ajouter dans votre message original de la copie/coller de ton "Post" class veuillez Statique Assistant?
Oui, monsieur. Je l'ai fait déjà il y a quelques minutes 🙂
Oh, ok, je comprends maintenant... category_id est le champ de base de données, mais ce que j'ai à utiliser est "catégorie" mappé dans ma classe... Au moins j'ai appris de mon erreur ! Merci pour vos conseils!!!
C'est exactement cela! Mon mal pour ne pas le voir précédemment! Heureux, il a aidé 🙂
OriginalL'auteur Yoann Chambonnet
Lorsque vous exécutez une crue de la requête à l'aide de la Doctrine de la couche DBAL les résultats de revenir comme un tableau de noms de champs mappés à des valeurs plutôt que comme des entités.
Par conséquent, vous avez besoin de quelque chose comme ceci:
OriginalL'auteur redbirdo