propelorm/Propel

PDO Exception on sqlite: pot able to relate entities

Closed this issue · 1 comments

My setup works like a charm. I am able to insert objects (create Users) and fetch them. But I am not able to relate objects. In the following example I want to create a user (this part works) and then create a new order with the user_id as foreign key.

$user = new User();
$user->setFirstName('Chris');
$user->setLastName('somename');
$user->setEmail('example@test.com');
$user->setPassword(password_hash("1234", PASSWORD_DEFAULT));
$user->save();

$order = new Order();
$order->setUser($user);
$order->save();

The second part throws the following PDOException:

I tried a lot, but I am not able to create a order.

/usr/bin/php -S localhost:8080 -t /Users/chris/Documents/slim
exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1 near "order": syntax error' in /Users/chris/Documents/slim/vendor/propel/propel/src/Propel/Runtime/Connection/PdoConnection.php:143
Stack trace:
#0 /Users/chris/Documents/slim/vendor/propel/propel/src/Propel/Runtime/Connection/PdoConnection.php(143): PDO->prepare('INSERT INTO ord...', Array)
#1 /Users/chris/Documents/slim/vendor/propel/propel/src/Propel/Runtime/Connection/StatementWrapper.php(75): Propel\Runtime\Connection\PdoConnection->prepare('INSERT INTO ord...', NULL)
#2 /Users/chris/Documents/slim/vendor/propel/propel/src/Propel/Runtime/Connection/ConnectionWrapper.php(383): Propel\Runtime\Connection\StatementWrapper->prepare(NULL)
#3 /Users/chris/Documents/slim/domain/Base/Order.php(748): Propel\Runtime\Connection\ConnectionWrapper->prepare('INSERT INTO ord...')
#4 /Users/chris/Documents/slim/domain/Base/Order.php(680): Base\Order->doInsert(Object(Propel\Runtime\Connection\ConnectionWrapper))
#5 /Users/chris/Documents/slim/domain/Base/Order.php(632): Base\Order->doSave(Object(Propel\Runtime\Connection\ConnectionWrapper))
#6 [internal function]: Base\Order->Base\{closure}()
#7 /Users/chris/Documents/slim/vendor/propel/propel/src/Propel/Runtime/Connection/TransactionTrait.php(35): call_user_func(Object(Closure))
#8 /Users/chris/Documents/slim/domain/Base/Order.php(645): Propel\Runtime\Connection\ConnectionWrapper->transaction(Object(Closure))
#9 /Users/chris/Documents/slim/index.php(88): Base\Order->save()
#10 [internal function]: {closure}()
#11 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Route.php(468): call_user_func_array(Object(Closure), Array)
#12 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Slim.php(1338): Slim\Route->dispatch()
#13 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/Flash.php(85): Slim\Slim->call()
#14 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call()
#15 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/SessionCookie.php(110): Slim\Middleware\MethodOverride->call()
#16 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\SessionCookie->call()
#17 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Slim.php(1283): Slim\Middleware\PrettyExceptions->call()
#18 /Users/chris/Documents/slim/index.php(174): Slim\Slim->run()
#19 {main}

Next exception 'Propel\Runtime\Exception\PropelException' with message 'Unable to execute INSERT statement [INSERT INTO order (id, user_id) VALUES (:p0, :p1)]' in /Users/chris/Documents/slim/domain/Base/Order.php:765
Stack trace:
#0 /Users/chris/Documents/slim/domain/Base/Order.php(680): Base\Order->doInsert(Object(Propel\Runtime\Connection\ConnectionWrapper))
#1 /Users/chris/Documents/slim/domain/Base/Order.php(632): Base\Order->doSave(Object(Propel\Runtime\Connection\ConnectionWrapper))
#2 [internal function]: Base\Order->Base\{closure}()
#3 /Users/chris/Documents/slim/vendor/propel/propel/src/Propel/Runtime/Connection/TransactionTrait.php(35): call_user_func(Object(Closure))
#4 /Users/chris/Documents/slim/domain/Base/Order.php(645): Propel\Runtime\Connection\ConnectionWrapper->transaction(Object(Closure))
#5 /Users/chris/Documents/slim/index.php(88): Base\Order->save()
#6 [internal function]: {closure}()
#7 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Route.php(468): call_user_func_array(Object(Closure), Array)
#8 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Slim.php(1338): Slim\Route->dispatch()
#9 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/Flash.php(85): Slim\Slim->call()
#10 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call()
#11 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/SessionCookie.php(110): Slim\Middleware\MethodOverride->call()
#12 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\SessionCookie->call()
#13 /Users/chris/Documents/slim/vendor/slim/slim/Slim/Slim.php(1283): Slim\Middleware\PrettyExceptions->call()
#14 /Users/chris/Documents/slim/index.php(174): Slim\Slim->run()
#15 {main}
[Sun Feb  1 09:56:45 2015] ::1:62015 [500]: /test
<?xml version="1.0" encoding="UTF-8"?>
<database name="shop" defaultIdMethod="native">
    <table name="user" phpName="User">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="firstname" type="varchar" size="255" required="true" />
        <column name="lastname" type="varchar" size="255" required="true" />
        <column name="email" type="varchar" size="255" required="true" />
        <column name="password" type="varchar" size="255" required="true"/>
        <!-- values: customer, employee -->
        <column name="role" type="varchar" size="255" defaultValue="customer" required="true"/>
    </table>
    <table name="product" phpName="Product">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="name" type="varchar" size="128" required="true"/>
        <column name="img" type="varchar" size="128" required="true"/>
        <column name="unit" type="varchar" size="10" required="true"/>
        <column name="description" type="varchar" size="255" required="false"/>
        <column name="unit_price" type="float" required="true"/>
    </table>
    <table name="order" phpName="Order">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <column name="user_id" type="integer" required="true" />
        <column name="datetime" type="timestamp" defaultExpr="CURRENT_TIMESTAMP" />
        <foreign-key foreignTable="user">
            <reference local="user_id" foreign="id" />
        </foreign-key>
    </table>
    <table name="orderposition" phpName="OrderPosition">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="order_id" type="integer" required="true"/>
        <column name="product_id" type="integer" required="true"/>
        <column name="quantity" type="integer" required="true"/>
        <foreign-key foreignTable="order">
            <reference local="order_id" foreign="id" />
        </foreign-key>
        <foreign-key foreignTable="product">
            <reference local="product_id" foreign="id" />
        </foreign-key>
    </table>
</database>

order is a reserved word, please change it to something different or use Propel v2 and activate identifierQuoting.