Maison > Questions et réponses > le corps du texte
Il existe deux instances de blog et de commentaire :
blog.comments
stocke le type de commentairecomment.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;
天蓬老师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.