Autor | Zpráva | ||
---|---|---|---|
breeta Profil |
#1 · Zasláno: 2. 8. 2017, 11:29:25
Zdtravím, mám problém s Propel ORM, mám nadefinované tabulky viz níže a při ukládání tabulky ProductGroup:
foreach(ProductMenuKeywordQuery::create()->find() as $key) { $isKey = strpos($stringKeys, strtolower($key->getName())); if($isKey) { $pk = new ProductGroup(); $pk->setProductId($product->getId()); $pk->setProductMenuId($key->getProductMenuId()); $pk->save(); } } Mě u některém uložení vyhodí: Propel\Runtime\Exception\PropelException Unable to execute INSERT statement [INSERT INTO `product_group` (`product_id`, `product_menu_id`) VALUES (:p0, :p1)] Neví někdo čím to může být? <table name="product_menu" phpName="ProductMenu"> <column name="id" primaryKey="true" autoIncrement="true" type="integer" /> <column name="name" type="varchar" required="true" primaryString="true" /> <column name="url" type="varchar" size="160" required="true" primaryString="true" /> <behavior name="nested_set" /> <unique > <unique-column name="url"/> </unique> </table> <table name="product_menu_keyword" phpName="ProductMenuKeyword" > <column name="id" primaryKey="true" autoIncrement="true" type="integer" /> <column name="name" type="varchar" required="true" primaryString="true" /> <column name="product_menu_id" type="integer" primaryKey="true" required="true"/> <foreign-key foreignTable="product_menu"> <reference local="product_menu_id" foreign="id"/> </foreign-key> </table> <table name="product_group" phpName="ProductGroup" isCrossRef="true" > <column name="product_id" type="integer" primaryKey="true" /> <foreign-key foreignTable="product"> <reference local="product_id" foreign="id"/> </foreign-key> <column name="product_menu_id" type="integer" primaryKey="true" /> <foreign-key foreignTable="product_menu"> <reference local="product_menu_id" foreign="id"/> </foreign-key> </table> <table name="product" phpName="Product" > <column name="id" primaryKey="true" autoIncrement="true" type="integer" /> <column name="xml_product_id" type="integer" /> <column name="customers" type="integer" /> <column name="title" type="varchar" required="true" /> <column name="description" type="varchar" required="true" /> <column name="category" type="varchar" required="true" /> <column name="discount" type="varchar" required="true" /> <column name="url" type="varchar" size="160" required="true" /> <column name="image" type="varchar" required="true" /> <column name="final_price" type="float" required="true" /> <column name="original_price" type="float" required="true" /> <column name="deal_start" type="timestamp" /> <column name="deal_end" type="timestamp" /> <column name="top" type="boolean" required="true" /> <column name="xml_id" type="integer" required="true"/> <foreign-key foreignTable="xml"> <reference local="xml_id" foreign="id"/> </foreign-key> <index name="fulltext"> <index-column name="title"/> <index-column name="description"/> <vendor type="mysql"> <parameter name="Index_type" value="FULLTEXT"/> </vendor> </index> </table> Unable to execute INSERT statement [INSERT INTO `product_group` (`product_id`, `product_menu_id`) VALUES (:p0, :p1)] |
||
Keeehi Profil |
#2 · Zasláno: 2. 8. 2017, 21:42:41
To co jsi sem dal nevypadá, že by bylo špatně. Selhat to může ze spousty důvodů. Například kvůli unikátnímu indexu nebo cizím klíčům. Vzal bych ten dotaz, dosadil tam hodnoty co bych si vypsal v cyklu a pustil to ručně do databáze. Nejspíše vy to mělo taky selhat a navíc i říct proč.
|
||
breeta Profil |
Zachytí to tahle část kódu v Base/ProductGroup.php , udělal jsem dump přímo getMessage() a hlásí to:
"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '11615-27' for key 'PRIMARY'" try { $stmt = $con->prepare($sql); foreach ($modifiedColumns as $identifier => $columnName) { switch ($columnName) { case '`product_id`': $stmt->bindValue($identifier, $this->product_id, PDO::PARAM_INT); break; case '`product_menu_id`': $stmt->bindValue($identifier, $this->product_menu_id, PDO::PARAM_INT); break; } } $stmt->execute(); } catch (Exception $e) { Propel::log($e->getMessage(), Propel::LOG_ERR); throw new PropelException(sprintf('Unable to execute INSERT statement [%s]', $sql), 0, $e); } |
||
Kajman Profil |
#4 · Zasláno: 3. 8. 2017, 08:32:31
To znamená, že tam vkládáte dvojici hodnot, která má být jedinečná (primární klíč), ale již v tabulce tato dvojice je.
|
||
breeta Profil |
#5 · Zasláno: 3. 8. 2017, 08:43:40
Díky všem, udělal jsem ověření jestli daná dvojice existuje před uložením.
|
||
Časová prodleva: 7 let
|
0