Expected value of type "MyBundle\HotelBundle\Model\Pic" for association field "MyBundle\HotelBundle\Model\Hotel#$pics", got "NULL" instead.
public function setPic( ? Pic $pic) {
$this->pics = $pic;
}
public function setPic($pic)
, а в доках к функции указать тип для значения, чтоб IDE все понимала, и не парить себе мозги. А может лучше сначала ициализировать Pic,
как-то неправильно получается, в setPic ты ожидаешь Pic, а вместо него прилетает null,
public function __construct(string $id)
{
$this->id = $id;
$this->pics = new Collection();
}
<code>
public function __construct(string $id)
{
$this->id = $id;
$this->pics = new ArrayCollection();
}
</code>
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="MyBundle\HotelBundle\Model\Hotel" table="ex_hotels" repository-class="MyBundle\HotelBundle\Repository\HotelRepository">
<id name="id" type="guid">
<generator strategy="NONE"/>
</id>
<field name="title" type="string"/>
<field name="description" type="text"/>
<field name="startDate" type="datetime" nullable="true"/>
<field name="endDate" type="datetime" nullable="true"/>
<one-to-many field="pics" target-entity="MyBundle\HotelBundle\Model\Pic"
mapped-by="hotel">
<cascade>
<cascade-all/>
</cascade>
</one-to-many>
</entity>
</doctrine-mapping>
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="MyBundle\HotelBundle\Model\Pic" table="ex_pics" repository-class="MyBundle\HotelBundle\Repository\PicRepository">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="mediaFile" type="integer"/>
<many-to-one field="hotel" target-entity="MyBundle\HotelBundle\Model\Hotel" inversed-by="pics">
<cascade>
<cascade-all/>
</cascade>
<join-columns>
<join-column name="idHotels" on-delete="CASCADE" referenced-column-name="id" nullable="false"/>
</join-columns>
</many-to-one>
</entity>
</doctrine-mapping>
protected $pics;
public function __construct(string $id)
{
$this->id = $id;
$this->pics = new ArrayCollection();
public function addPic(? Collection $pics)
{
$this->pics[] = $pics;
return $this;
}
public function removePic($pics)
{
$this->pics->removeElement($pics);
}
public function getPics(): ? Collection
{
return $this->pics;
}
protected $hotel;
public function setHotel($hotel)
{
$this->hotel = $hotel;
return $this;
}
public function getHotel()
{
return $this->hotel;
}
IDE Ругается, заставляет изменить на
protected $pics;
// вы уверены что тип у айди - стринг? и что его надо передавать в конструктор?
public function __construct(string $id)
{
$this->id = $id;
$this->pics = new ArrayCollection();
}
// здесь элемент должен быть строго экземпляром класса Pic, потому что вы знаете какой элемент хотите добавить и вы не хотите добавлять "пустые" картинки
/**
* Add pic
*
* @param Pic $pic
*/
public function addPic(Pic $pic)
{
if (! $this->pics->contains($pic)) {
$this->pics[] = $pic;
}
}
// здесь элемент должен быть строго экземпляром класса Pic, потому что вы знаете какой элемент хотите удалить
public function removePic(Pic $pic)
{
$this->pics->removeElement($pics);
}
// можете получить null, если не проинициализируете поле по умолчанию в конструкторе. Но обычно вы будете получать этим методом список картинок которые есть у отеля
public function getPics(): ? ArrayCollection
{
return $this->pics;
}
// можете передать null, либо, если угодно, пустую коллекцию - чтобы удалить сразу все картинки.
// в иных случаях вы знаете что должны передать всю коллекцию картинок за раз.
public function setPics(? ArrayCollection $pics)
{
$this->pics = $pics;
}
Return value of MyBundle\\HotelBundle\\Model\\Hotel::getPics() must be an instance of Doctrine\\Common\\Collections\\ArrayCollection or null, instance of Doctrine\\ORM\\PersistentCollection returned