Silex中的学说ORM:坚持不工作

时间:2016-08-04 14:26:13

标签: php orm doctrine-orm doctrine silex

我在Silex中遇到了Doctrine ORM的问题。我能够获取一些数据,但无法在我的数据库中保存实体。

这是我对Doctrine ORM的配置:

$app['em'] = function ($app) {
    $params = array(
        'driver' => 'pdo_mysql',
        'dbname' => 'beacon_prototype',
        'host' => 'localhost',
        'user' => '****',
        'password' => '****',
        'charset'  => 'utf8',
    );

    $config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src/Domain"), true);

    $driver = new AnnotationDriver(new AnnotationReader(), array(__DIR__."/src/Domain"));

    AnnotationRegistry::registerLoader('class_exists');
    $config->setMetadataDriverImpl($driver);

    $em = EntityManager::create($params, $config);

    return $em;
};

我可以在控制器中获取一些对象:

$room = $app['em']->getRepository('Generic\Domain\Room')->findById($room_id);

但是当我尝试在我的数据库中添加一行时,它无法正常工作。

$booking = new Booking();
$booking->setEventName($event_name);
$booking->setRoom($room);
$booking->setUser($user);
$booking->setEventStart($event_start);
$booking->setEventEnd($event_end);

$app['em']->persist($booking);
$app['em']->flush();

这是我的预订模式:

namespace Generic\Domain;

使用\ Doctrine \ ORM \ Mapping作为ORM;

/**
 * Generic\Domain\Booking
 *
 * @ORM\Entity
 * @ORM\Table(name="booking")
 */
class Booking
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="booking", fetch="EAGER")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    public $user;

    /**
     * @ORM\ManyToOne(targetEntity="Room", inversedBy="booking", fetch="EAGER")
     * @ORM\JoinColumn(name="room_id", referencedColumnName="id")
     */
    public $room;

    /**
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    public $event_name;

    /**
     * @ORM\Column(type="datetime", length=255, nullable=false)
     */
    public $event_start;

    /**
     * @ORM\Column(type="datetime", length=255, nullable=false)
     */
    public $event_end;

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

很奇怪我有几乎相同的配置,一切都很好。 我的配置

$settings = $c->get('settings')['doctrine'];

$config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(
    $settings['meta']['entity_path'],
    $settings['meta']['auto_generate_proxies'],
    $settings['meta']['proxy_dir'],
    $settings['meta']['cache'],
    false
);

$em = \Doctrine\ORM\EntityManager::create($settings['connection'], $config);