Проверьте, существует ли уже УНИКАЛЬНАЯ строка, используя findBy в ManyToMany, какой-нибудь обходной путь или рабочее решение?

Итак, я определил эти отношения в моих сущностях:

class Producto
{
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Norma", inversedBy="normasProducto", cascade={"persist"})
* @ORM\JoinTable(name="nomencladores.norma_producto", schema="nomencladores",
*      joinColumns={@ORM\JoinColumn(name="producto_id", referencedColumnName="id")},
*      inverseJoinColumns={@ORM\JoinColumn(name="norma_id", referencedColumnName="id")}
* )
*/
protected $productoNormas;

}class Norma
{
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Producto", mappedBy="productoNormas", cascade={"persist"})
*/
protected $normasProducto;
}

И я пытаюсь проверить, если данная пара producto_idnorma_id уже существует, не пытайтесь вставить его еще раз, и я делаю следующим образом:

$exists = $em->getRepository('AppBundle:Producto')->findOneByProductoNormas($productoId);

if ($exists) {
$status = 400;
} else {
try {
$producto->addProductoNormas($normaEntity);
$em->flush();
$response['success'] = true;
} catch (Exception $ex) {
$status = 400;
$response['error'] = $ex->getMessage();
}
}

Но я получаю эту ошибку:

Примечание: неопределенный индекс: joinColumns in
/var/www/html/project.dev/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php
линия 1665

Проводя исследование в Google и здесь, на SO, я обнаружил, что это возможно, это ошибка, как точка Вот или, возможно, нет, и мы (я и другие, которые сообщают о проблеме) делаем что-то не так. Я не могу найти, где проблема или проблема, таким образом любой совет или помощь будут хороши для меня и других. Единственная идея, которую я имею в виду, — это создать представление в RDBMS, а затем создать объект для чтения и проверить, существует ли запись, у меня есть не что иное, как это, есть идеи? Помогите? Рабочий пример кода?

0

Решение

На самом деле вы можете использовать сервис ‘database_connection’, чтобы проверить, существует ли такая строка:

$this->get('database_connection')
->fetchColumn('select count(id) as cnt
from <norma_producto_table>
where producto_id = ? and
norma_id = ?', array($producto_id, $norma_id));

Это действительно проще, чем пытаться справиться со многими методами отношений. Я бы сделал это, если бы мне пришлось делать то, что вам нужно (и на самом деле я делаю это).

0

Другие решения

Я не знаю окончательного ответа, но у меня была та же проблема, и это имело какое-то отношение к моим аннотациям сущностей, хотя я не могу сказать, что именно ..

Вот рабочий пример с фотографиями и альбомами

class Photo
{
/**
* @ORM\ManyToMany(targetEntity="Acme\MyBundle\Entity\Album", inversedBy="photos")
* @ORM\JoinColumn(nullable=true)
*/
private $albums;

class Album
{
/**
* @ORM\ManyToMany(targetEntity="Acme\MyBundle\Entity\Photo", mappedBy="albums")
* @ORM\JoinColumn(nullable=true)
*/
private $photos;

Чтобы проверить существование, которое вы могли бы сделать, скажем, вы ищете фотографию idPic

$photo = $repository ... ->findOneBy($idPic)
if($photo->getAlbums()->contains($album))
0

По вопросам рекламы [email protected]