У меня есть объект продукта и объект изображения продукта. Я хочу использовать мягкое удаление только для объекта продукта и удалить объект изображения продукта. Софт-удаление отлично работает. Когда я удаляю товар, в столбце delete_at устанавливается текущее время. Поэтому я хотел бы удалить изображение продукта при обновлении столбца delete_at. Мне было интересно, могу ли я сделать это прямо в классе сущностей? и как?
Сущность продукта, в которой я пытаюсь сделать сбор данных в функции setDeletedAt. * 1003 *
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ProductImage", mappedBy="product", orphanRemoval=true, cascade={"persist"})
*/
private $productImages;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $deleted_at;
public function __construct()
{
$this->productImages = new ArrayCollection();
}
public function setDeletedAt(?\DateTimeInterface $deleted_at): self
{
// Here I try to remove images when deleted_at column is updated
$productImage = $this->getProductImages();
$this->removeProductImage($productImage);
$this->deleted_at = $deleted_at;
return $this;
}
/**
* @return Collection|ProductImage[]
*/
public function getProductImages(): Collection
{
return $this->productImages;
}
public function addProductImage(ProductImage $productImage): self
{
if (!$this->productImages->contains($productImage)) {
$this->productImages[] = $productImage;
$productImage->setProduct($this);
}
return $this;
}
public function removeProductImage(ProductImage $productImage): self
{
if ($this->productImages->contains($productImage)) {
$this->productImages->removeElement($productImage);
// set the owning side to null (unless already changed)
if ($productImage->getProduct() === $this) {
$productImage->setProduct(null);
}
}
return $this;
}
}
Но когда я делаю мягкое удаление, вызывается setDeletedAt () и возникает следующая ошибка:возвращено:
Argument 1 passed to App\Entity\Product::removeProductImage() must be an instance of App\Entity\ProductImage, instance of Doctrine\ORM\PersistentCollection given, called in ...
Спасибо за вашу помощь!
---- ОБНОВЛЕНИЕ ----
Решение, предоставленное Джоном, прекрасно работает:
foreach ($this->getProductImages() as $pi) {
$this->removeProductImage($pi);
}
Спасибо!