Erreur de requête SYMFONY2 LEFTJOIN
習慣沉默
習慣沉默 2017-05-16 16:44:35
0
1
579

Il existe deux instances de blog et de commentaire :

  • blog.comments stocke le type de commentaire
  • comment.blog_id est la clé étrangère du blog

Mon énoncé de requête :

public function getLatestBlogs($limit=null){
    $qb = $this->createQueryBuilder('b')
        ->select('b','c')
        ->leftJoin('b.comments', 'c')
        ->addOrderBy('b.created', 'DESC')
    ;

    if (false === is_null($limit))
        $qb->setMaxResults($limit);

    return $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);
}

Message d'erreur :

Error: Call to a member function add() on a non-object in E:\xampp\htdocs\symfony\vendor\doctrine\orm\lib\Doctrine\ORM\PersistentCollection.php line 177
500 Internal Server Error - FatalErrorException 

Commentez le code principal, le reste est généré

/**
 * Class Comment
 * @ORM\Entity(repositoryClass="Blogger\BlogBundle\Entity\CommentRepository")
 * @ORM\Table(name="comment")
 * @ORM\HasLifecycleCallbacks()
 */
class Comment{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string",length=100)
     */
    protected $user;

    /**
     * @ORM\Column(type="text")
     */
    protected $comment;

    /**
     * @ORM\Column(type="boolean")
     */
    protected $approved;

    /**
     * @ORM\ManyToOne(targetEntity="Blog",inversedBy="comments")
     * @ORM\JoinColumn(name="blog_id",referencedColumnName="id")
     */
    protected $blog;

    /**
     * @ORM\Column(type="datetime")
     */
    protected $created;

    /**
     * @ORM\Column(type="datetime")
     */
    protected $updated;

 }

Code principal du blog :

class Blog{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string")
 */
protected $title;

/**
 * @ORM\Column(type="string",length=100)
 */
protected $author;

/**
 * @ORM\Column(type="text")
 */
protected $blog;

/**
 * @var
 * @ORM\Column(type="string",length=20)
 */
protected $image;

/**
 * @var
 * @ORM\Column(type="text")
 */
protected $tags;

/**
 * @ORM\OneToMany(targetEntity="Comment",mappedBy="blog")
 */
protected $comments = array();

/**
 * @var
 * @ORM\Column(type="datetime")
 */
protected $created;

/**
 * @var
 * @ORM\Column(type="datetime")
 */
protected $updated;
習慣沉默
習慣沉默

répondre à tous(1)
Peter_Zhu

Vous devez publier le code de votre blog et les catégories de commentaires, au moins inclure les commentaires sur le blog.

MISE À JOUR1 :

La valeur par défaut de l'attribut comments sur votre classe Blog est un tableau vide, mais Doctrine utilise en fait ArrayCollection. La méthode add() dans votre message d'erreur est fournie par ArrayCollection.

use Doctrine\Common\Collections\ArrayCollection;

// 在Blog的constructor里给comments一个默认值:
public function __construct()
{
    $this->comments = new ArrayCollection();
}

Code source :

https://github.com/doctrine/collections/blob/master/lib/Doctrine/Common/Collections/ArrayCollection.php

MISE À JOUR2 :

Doctrine est un ORM, il possède donc une interface orientée objet à la fois à l'intérieur et à l'extérieur.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal