如何确保Symfony中参数包含Collection或ArrayCollection

问题描述 投票:0回答:1

我有 2 个名为“cred_pathway”和“course”的表。他们具有多对多关系。

我在注释中定义了关系,如下。

/**
 * @var Course[]|ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="Course\Entity\Course", inversedBy="cred_pathway")
 * @ORM\JoinTable(name="cred_pathway_course",
 *   joinColumns={
 *     @ORM\JoinColumn(name="cred_pathway_id", referencedColumnName="id")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="course_id", referencedColumnName="id")
 *   }
 * )
 */
private $credPathwayCourse;

如果列表中尚不存在该课程,我想将新课程添加到列表中。

 public function addCourse(Course $course) {
    if (!$this->credPathwayCourse->contains($course)) {
        $this->credPathwayCourse->add($course);
    }
}

但问题是

$this->credPathwayCourse
在运行时包含一个数组,并且它会抛出以下数组,因为我正在尝试访问数组上的
contains()
函数。

调用数组上的成员函数 contains()

有没有办法确保

$this->credPathwayCourse
包含 Collection 或 ArrayCollection?

php symfony doctrine
1个回答
0
投票

你可以像这样输入提示:

private Collection $credPathwayCourse;

然后创建一个构造函数以确保使用正确的集合类型设置您的属性:

public function __construct() {
    $this->credPathwayCourse = new ArrayCollection;
}

请注意,

ArrayCollection
实现了
Collection
接口,因此,如果您决定以后要使用不同的集合类型,则可以在构造函数中将其交换。

© www.soinside.com 2019 - 2024. All rights reserved.