Doctrine ArrayCollection 在 null 上调用成员函数 setValue()

Doctrine ArrayCollection Call to a member function setValue() on null

我正在使用 Zend Framework 3 编写应用程序。为了管理数据库,我决定使用 Doctrine。我有两个表格页面和 pages_meta(基于 wordpress 数据库的东西)。它们以一对多、多对一的关系相互关联。在 pages_meta 中,我有密钥 page_id。现在,当我尝试获取元表单页面实体时,出现以下错误:

File: /home/platne/serwer18346/vendor/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php:169 Message: Call to a member function setValue() on null

现在申请代码:
页面实体(删除了一些代码以显示重要部分):

namespace Core\Model;


use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Class Page
 * @package Core\Model
 * @ORM\Entity
 * @ORM\Table(name="pages")
 */
class Page
{

    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(name="id")
     */
    protected $id;

    //other fields definition(here is slug to found by)

    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="\Core\Model\PageMeta", mappedBy="pages")
     * @ORM\JoinColumn(name="id", referencedColumnName="page_id")
     */
    protected $meta;

    /**
     * Page constructor.
     */
    public function __construct()
    {
        $this->meta = new ArrayCollection();
    }


    /**
     * @return int
     *
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $key
     * @return ArrayCollection
     */
    public function getPageMeta($key = null){
        if(!$key) return $this->meta;
        return $this->meta->current(); //this is causing the problem tried other functions as well
    }

}

PageMeta 实体(同样这里我删除了一些代码):

namespace Core\Model;

use Doctrine\ORM\Mapping as ORM;

/**
 * Class PageMeta
 * @package Core\Model
 * @ORM\Entity
 * @ORM\Table(name="page_meta")
 */
class PageMeta
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(name="id")
     */
    protected $id;
    /**
     * @var int
     * @ORM\Column(type="integer", name="page_id")
     */
    protected $page_id;

    /**
     * @var Page
     * @ORM\ManyToOne(targetEntity="\Core\Model\Page", inversedBy="page_meta")
     * @ORM\JoinColumn(name="page_id", referencedColumnName="id")
     */
    protected $page;

    /**
     * @return int
     */
    public function getId(): int
    {
        return $this->id;
    }

    /**
     * @return int
     */
    public function getPageId(): int
    {
        return $this->page_id;
    }

    /**
     * @param int $page_id
     * @return PageMeta
     */
    public function setPageId(int $page_id): PageMeta
    {
        $this->page_id = $page_id;
        return $this;
    }

    //other field definition 

    /**
     * @return Page
     */
    public function getPage(){ //this works fine
        return $this->page;
    }


}

在控制器中:

 $this->getEntityManager()->getRepository(Page::class);
 $page = $pagesTable->findOneBySlug($slug);
 //check if page exists
 $page->getPageMeta('test'); //this line cause the problem.

您可以在页面上看到完整的堆栈错误:http://bibliotekadomowa.pl/o-nas

我认为 Page 中的 "mappedBy" 参数可能有问题,请尝试将其更改为

mappedBy="page"

因为它应该匹配变量名而不是 table 名称