SYMFONY2 LEFTJOIN查詢錯誤
習慣沉默
習慣沉默 2017-05-16 16:44:35
0
1
542

有兩個實例 blog 和 comment:

  • blog.comments 存放的是 comment 型別
  • comment.blog_id 是 blog 的外鍵

我的查詢語句:

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);
}

錯誤提示:

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 

commment主要程式碼,其它都是產生的

/**
 * 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;

 }

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;
習慣沉默
習慣沉默

全部回覆(1)
Peter_Zhu

你得把你blog和comment類別的程式碼貼出來,至少要包含blog上的comments。

UPDATE1:

你Blog類別上的comments屬性預設值是空數組,而Doctrine實際用到的是ArrayCollection,你報錯訊息裡的add()方法就是由ArrayCollection提供的。

use Doctrine\Common\Collections\ArrayCollection;

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

原始碼:

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

UPDATE2:

Doctrine是個ORM,所以內外都是面對物件的介面。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!