recherche

Maison  >  Questions et réponses  >  le corps du texte

Erreur de requête SYMFONY2 LEFTJOIN

Il existe deux instances de blog et de commentaire :

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;
習慣沉默習慣沉默2756 Il y a quelques jours558

répondre à tous(1)je répondrai

  • 天蓬老师

    天蓬老师2017-05-16 16:46:35

    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.

    répondre
    0
  • Annulerrépondre