I am new to Doctrine 2 and I am trying to Create a new Transaction
then try to see if that Transaction
belong to any pre-existing Category
. If it does then associate this Transaction
to the given Category
When I run the code below at the highlighted point it should associate the Transaction
to a Category
. But I get the following Error
which then tells me that the code is trying to add a new Category
... but what I need it to do is to add a new reference in the table transactions_category
(see the Picture below to see this table schema) and NOT a new Category... as that one already exists....
Its a ManyToMany
association
How can I associate the two entities properly?
The Error:
An exception occurred while executing 'INSERT INTO category (name) VALUES (?)' with params ["Gyms"]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Gyms' for key 'name'
The Code
// Get all Categories
$categoryList = $this->getEntityManager()->getRepository('Bnk\Entity\Category')->findAll();
foreach ( $CSVData as $transactionRaw )
{
$transaction = new \Bnk\Entity\Transaction();
$transaction->setDescription( $transactionRaw[ "description" ] );
$transaction->setValue( $transactionRaw[ "value" ] );
$transaction->setDate( $transactionRaw[ "date" ] );
$transaction->setAccountnumber( $transactionRaw[ "accountNumber" ] );
$transaction->setAccountname( $transactionRaw[ "accountName" ] );
$this->getEntityManager()->persist( $transaction );
// Check if there are categories
if(!empty($categoryList))
{
// Loop through the categories
/** @var \Bnk\Entity\Category $category */
foreach( $categoryList as $category )
{
if( !$regexEntities = $category->getCategoryregex() )
// Loop through the regex of a given category
/** @var \Bnk\Entity\CategoryRegex $regex */
foreach( $regexEntities as $regex )
{
if(strpos($transactionRaw["description"],$regex->getName()) !== false)
{
// I am trying to associate the Transaction to this Category
// Instead this is adding the Category as if it was a new one
$transaction->addCategory($category);
}
}
}
}
$this->getEntityManager()->flush();
$this->getEntityManager()->clear();
}