Autor Zpráva
breeta
Profil
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
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
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
Díky všem, udělal jsem ověření jestli daná dvojice existuje před uložením.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: