У меня есть 2 enteties.Проблема с ManyToMany отношения
Пакет и StockItem.
В пакете может быть много StockItems, а StockItem может принадлежать многим пакетам. Кажется, что наиболее подходящим является ManyToMany.
Проблема возникает при попытке добавить 2 той же stockitems в пакет, мы получаем нарушение Integraty:
{"code":500,"message":"An exception occurred while executing 'INSERT INTO StockItem_In_Package (package_id, stockitem_id) VALUES (?, ?)' with params [4, 1]:\n\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '4-1' for key 'PRIMARY'"}
Поскольку пакет (ID 4), создает 2 отношения с stockItem 1.
4-1 и 4-1
Можно ли обойти это каким-либо образом? Можно ли добавить третий столбец с именем id в таблицу ManyToMany или добавить один элемент ItemCountInPackage и просто увеличить его на единицу, если тот же самый добавлен в пакет? Что было бы лучшим решением.
пакет Entity, только вставив соответствующий код:
/**
* Package
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="IHEnterprise\LogisticsBundle\Entity\PackageRepository")
* @ORM\HasLifecycleCallbacks
*
* @ExclusionPolicy("all")
*
*/
class Package
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Expose
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="IHEnterprise\LogisticsBundle\Entity\StockItem", cascade={"all"}, indexBy="package_id")
* @ORM\JoinTable(name="StockItem_In_Package",
* joinColumns={@ORM\JoinColumn(name="package_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="stockitem_id", referencedColumnName="id")}
* )
* @Expose
* @Assert\NotNull()
**/
private $stockItems;
}
StockItem Entity, только вставив соответствующий код:
/**
* StockItem
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="IHEnterprise\LogisticsBundle\Entity\StockItemRepository")
* @ORM\HasLifecycleCallbacks
*
* @ExclusionPolicy("all")
*
*/
class StockItem
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Expose
*/
private $id;
}
мне не нужно следить за то, что принадлежит StockItems, к которому упаковывает, только какие пакеты содержат эти запасы.
Да, я, так как их должно быть 2 из них –
Хум, это не выполнимо. Отношение должно быть уникальным. Вы можете клонировать вашу сущность так, чтобы у вас был дубликат, но вы не можете добавить дважды то же отношение. Это технически не выполнимо и концептуально неправильно:/Могу ли я узнать, зачем вам это нужно. Должен быть другой способ сделать это. –
О, я думаю, что знаю, чего ты хочешь. Вы делаете это, потому что хотите обрабатывать количество в запасе для одного элемента? –