Doctrine 2 - persist error - Warning: spl_object_hash () expects parameter 1 to be an object, null

I create such records in DOctrine. I am trying to add a cart to a page. These are my entities: My objects:

<?php namespace App\Entity; use Doctrine\Common\Collections\ArrayCollection; /** * @Entity(repositoryClass="App\Repository\Page") * @Table(name="page") */ class Page { /** * @Id @Column(type="integer", name="p_id") * @GeneratedValue */ private $p_id; /** @Column(type="string", name="p_title") */ private $p_title; /** @Column(type="datetime", name="p_created") */ private $p_created_at; /** @Column(type="datetime", name="p_updated_at") */ private $p_updated_at; /** @Column(type="text", name="p_abstract") */ private $p_abstract; /** @Column(type="text", name="p_fulltext", nullable=false) */ private $p_fulltext; /** @Column(type="string", name="p_author", nullable=true) */ private $p_author; /** @Column(type="string", name="p_url",nullable=true) */ private $p_url; /** @Column(type="string", name="p_meta_title",nullable=true) */ private $p_meta_title; /** @Column(type="string", name="p_meta_keywords",nullable=true) */ private $p_meta_keywords; /** @Column(type="string", name="p_meta_description",nullable=true) */ private $p_meta_description; /** @Column(type="string", name="p_status") */ private $p_status; /** @Column(type="string", name="p_weight") */ private $p_weight; /** * @ManyToOne(targetEntity="User", inversedBy="pages") * @JoinColumn(name="p_u_id", referencedColumnName="u_id") */ private $user; /** * @OneToMany(targetEntity="App\Entity\Page\Basket", mappedBy="page", cascade={"persist", "remove"}) */ protected $pageBaskets; public function __construct() { $this->pageBaskets = new ArrayCollection(); $this->pageMedia = new ArrayCollection(); } public function __get($property) { return $this->property; } public function __set($property,$value) { $this->$property = $value; } public function getPageMedia() { return $this->pageMedia; } public function setUser(\App\Entity\User $user) { $this->user = $user; } public function getMedias() { return $this->pageMedia; } public function getPageBaskets() { return $this->pageBaskets; } /** * Set Page Values * @var array $values */ public function setPageProperties(array $values) { $this->p_updated_at = new \DateTime("now"); $this->p_title = $values['p_title']; $this->p_abstract = $values['p_abstract']; $this->p_meta_title = $values['p_meta_title']; $this->p_meta_keywords = $values['p_meta_keywords']; $this->p_meta_description = $values['p_meta_description']; $this->p_url = $values['p_url']; $this->p_fulltext = $values['p_abstract']; $this->p_author = ''; $this->p_status = 1; } public function getSimpleValues() { return array( 'p_updated_at' => $this->p_updated_at, 'p_title' => $this->p_title, 'p_abstract' => $this->p_abstract, 'p_meta_title' => $this->p_meta_title, 'p_meta_keywords' => $this->p_meta_keywords, 'p_meta_description' => $this->p_meta_description, 'p_url' => $this->p_url, 'p_fulltext' => $this->p_fulltext, 'p_author' => $this->p_author ); } } ?> <?php namespace App\Entity\Page; use Doctrine\Common\Collections\ArrayCollection; /** * @Entity * @Table(name="page_basket") */ class Basket { /** * @Id @Column(type="integer", name="pb_id") * @GeneratedValue */ private $pb_id; /** * @ManyToOne(targetEntity="Entity\Page", ) * @JoinColumn(name="pb_id", referencedColumnName="p_id") */ private $page; public function __construct() { } public function __get($property) { return $this->property; } public function __set($property,$value) { $this->$property = $value; } public function setPage($page) { $this->page = $oszpage; } } ?> 

But where do such things do:

  $page->getPageBaskets()->add($basket); 

Im getting: Warning: spl_object_hash () expects parameter 1 to be an object, null given

What am I doing wrong?

+6
source share
1 answer

It is better to follow the examples in the manual until you feel more comfortable. Throw the magic _get / _set methods. D2 relies on intercepting method calls to do this. Treat collections of arrays as arrays and create special methods to interact with your entities.

In particular:

 public function addPageBasket($pageBasket) { $this->pageBaskets[] = $pageBasket; } ... $page->addPageBasket($pageBasket); 

PS. For your specific question, most likely $ basket is not an object.

+1
source

Source: https://habr.com/ru/post/909898/


All Articles