Symfony Doctrine : Feld Wert in der foreach-Schleife auf fetchAll()
Ich versuche, die Anzeige einiger Felder einer Tabelle 'Post' mit einem raw-Abfrage :
$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();
}
Hab ich noch einen Fehler "FatalErrorException: Error: Call to a member function getId() on a non-object in ..."
Alle diese Getter sind in meinen Post Entität. Jede Andeutung über das, was ich falsch mache ?
[BEARBEITEN]
$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();
}
Gibt mir "Unbekanntes Feld: "category_id".
Meinen Post Klasse :
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;
....
Vermutlich Ihre eigentliche sql ist (oder wird) komplexer als der code, den Sie gegeben haben, hier, wie bei symfony/doctrine raw-queries werden nur selten verwendet, wenn die höhere Ebene die Mechanismen unzureichend sind. Ein einfaches repository->findBy() würde ausreichen, um diese sql
Warum verwenden Sie raw-sql für solche einfachen Fälle?
Warum verwenden Sie raw-sql für solche einfachen Fälle?
InformationsquelleAutor | 2013-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum verwenden Sie direkt Ihre Verbindung hier? Sollten Sie mithilfe der entity-repository für Ihre "posts" - Klasse. Zum Beispiel :
das funktionieren sollte, ersetzen Sie einfach die
YourBundle:Post
mit dem richtigen Paket und Klassennamen. Dasselbe für diecategory_id
ich nicht erraten können, ohne Ihre Implementierung, wenn es die Eigenschaft der Klasse oder der Zuordnung name.Ich schlage vor, Sie Lesen mehr auf die offizielle Lehre der Dokumentation zu verbessern Sie Ihr wissen über das Thema.
Dann können Sie fügen Sie in Ihrem ursprünglichen post das kopieren/einfügen von Ihrem "Post" - Klasse bitte die Statische Assistenten?
Ja, sir. Ich habe es schon vor ein paar Minuten 🙂
Oh, ok, jetzt verstehe ich es... " category_id ist das Datenbank-Feld, aber das, was ich habe zu verwenden ist, "category" gemappt " in meiner Klasse... zumindest ich habe gelernt aus meinem Fehler ! Vielen Dank für Ihre Beratung !
Genau das ist es! Meine schlecht für die sehen Sie nicht vorher! Froh, dass es geholfen 🙂
InformationsquelleAutor Yoann Chambonnet
Beim ausführen einer raw query über die Lehre der DBAL layer-kommen die Ergebnisse wieder, die als array von Feldnamen zugeordnet zu Werten und nicht als Entitäten.
Deshalb brauchen Sie so etwas wie dieses:
InformationsquelleAutor redbirdo