В моем приложении ZF2 у меня есть 2 объекта Doctrine2: Product
and Partner
Поскольку в некоторых случаях продукт не нуждается в партнере, между товаром и партнером существует отношение NULL, связанное с ManyToOne.
Он работает, если партнер предоставлен в форме (выпадающий список). Но если нет, у меня есть эта ошибка:
An exception occurred while executing 'SELECT t0.id AS id1, t0.title AS title2 FROM partners t0 WHERE t0.id = ?' with params [""]:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: ""'
Объекты:
/**
* @ORM\Entity
* @ORM\Table(name="products")
*/
class Product extends AbstractEntity
{
/* ... */
/**
* @ORM\ManyToOne(targetEntity="Partner", inversedBy="products", cascade={"persist", "merge"})
* @ORM\JoinColumn(name="partner_id", referencedColumnName="id", nullable=true)
*/
protected $partner;
/* ... */
/**
* @return Partner
*/
public function getPartner()
{
return $this->partner;
}
/**
* @param Partner $partner
*
* @return $this
*/
public function setPartner(Partner $partner)
{
$this->partner = $partner;
return $this;
}
/* ... */
}
/**
* @ORM\Entity
* @ORM\Table(name="partners")
*/
class Partner extends AbstractEntity
{
/* ... */
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="partner", cascade={"persist", "merge", "remove"})
**/
protected $products;
/* ... */
public function __construct()
{
$this->products = new ArrayCollection();
}
/* ... */
/**
* @param Product $product
*
* @return $this
*/
public function addProduct(Product $product)
{
$this->products[] = $product;
$product->setPartner($this);
return $this;
}
/**
* @param $products
*
* @return $this
*/
public function addProducts($products)
{
foreach ($products as $product)
{
$this->addProduct($product);
}
return $this;
}
/**
* @param null $products
*
* @return $this
*/
public function removeProducts($products = null)
{
if (!$products)
{
$products = $this->getProducts();
}
foreach ($products as $product)
{
if (is_object($product))
{
$this->products->removeElement($product);
}
else $this->products->remove($product);
}
return $this;
}
/**
* @return mixed
*/
public function getProducts()
{
return $this->products;
}
/**
* @param mixed $products
*
* @return $this
*/
public function setProducts($products)
{
$this->products = $products;
return $this;
}
/* ... */
}
Любая помощь приветствуется.
Спасибо @hkulekci за ответ.
Я только что обновил свой фильтр ввода:
public function getInputFilterSpecification()
{
return [
'partner' => ['required' => true],
/* ... */
];
}
К тому, что:
public function getInputFilterSpecification()
{
return [
'partner' => [
'required' => true,
'continue_if_empty' => true,
'filters' => [
['name' => 'Null']
]
],
/* ... */
];
}
Вам нужно будет разрешить null
значение, которое будет передано setPartner
методы
public function setPartner(Partner $partner = null)
{
$this->partner = $partner;
return $this;
}
Кроме того, в зависимости от вашего гидратора формы вам нужно убедиться, что если ни один партнер не выбран, пустое значение должно быть преобразовано в значение null
.