我有 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?
你可以像这样输入提示:
private Collection $credPathwayCourse;
然后创建一个构造函数以确保使用正确的集合类型设置您的属性:
public function __construct() {
$this->credPathwayCourse = new ArrayCollection;
}
请注意,
ArrayCollection
实现了Collection
接口,因此,如果您决定以后要使用不同的集合类型,则可以在构造函数中将其交换。