Doctrine2:警告:isset或空的非法偏移类型

时间:2017-11-22 23:34:38

标签: php symfony doctrine-orm doctrine

我在Listing实体中有一个ManyToMany关系:

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ListingRepository")
 * @ORM\Table(name="listings")
 */
class Listing extends MainEntity
{
    /**
     * @ORM\Id
     * @ORM\Column(type="uuid")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\AttributeDescription", inversedBy="listings", cascade={"persist", "remove"})
     * @JoinTable(name="listing_attriubute_descriptions",
     *      joinColumns={@JoinColumn(name="listing_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="attribute_description_id", referencedColumnName="id")}
     *      )
     */
    public $attributeDescriptions;

    public function __construct()
    {
        $this->id = Uuid::uuid4();
        $this->attributeDescriptions = new ArrayCollection();
    }

    public function removeAttributeDescription(AttributeDescription $attributeDescription)
    {
        if(!$this->attributeDescriptions->contains($attributeDescription))
        {
            return;
        }
        $this->attributeDescriptions->remove($attributeDescription);

        return $this;
    }
}

在ListingService中的某个地方,我试图从列表实体中删除AttributeDescription,如下所示:

$listing->removeAttributeDescription($toRemoveAttributeDescription);

但出现错误:警告:isset中的非法偏移类型或空

使用xdebug我已经在ArrayCollection中找到了remove()方法:

public function remove($key)
{
    if ( ! isset($this->elements[$key]) && ! array_key_exists($key, $this->elements)) {
        return null;
    }

    $removed = $this->elements[$key];
    unset($this->elements[$key]);

    return $removed;
}

并发现问题来自isset($ this-> elements [$ key])。 以下是xdebug的截图:

enter image description here

如您所见,$ key包含AttributeDescription,$ this->元素是AttributeDescriptions数组。

我真的不知道我是做错了还是这是一个学说错误?

我正在使用: Symfony 3.3.13 with php 7.1.1

学说:

"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"doctrine/doctrine-migrations-bundle": "^1.2",
"doctrine/orm": "^2.5"

1 个答案:

答案 0 :(得分:4)

解决方案:我使用了错误的方法。我应该使用removeElement()

而不是remove()