在Doctrine 2 / CodeIgniter 2中找不到实体模型

时间:2012-12-27 16:16:07

标签: php codeigniter orm doctrine doctrine-orm

我一直在关注运行Doctrine的一些教程,当我尝试将对象插入数据库时​​似乎挂断了。作为参考,这就是我所关注的:doctrine 2 tutorial

  • Doctrine安装在application / libraries文件夹中
  • Doctrine.php bootstrapper位于application / libraries文件夹中
  • 在应用程序/文件夹
  • 中创建cli.php文件
  • 教程没有说明我的第一个实体模型放在哪里,所以我把它放在application / models

命名空间实体;

use Doctrine\Common\Collections\ArrayCollection;

/**
 * @Entity
 * @Table(name="user")
 */
class User
{

/**
 * @Id
 * @Column(type="integer", nullable=false)
 * @GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @Column(type="string", length=32, unique=true, nullable=false)
 */
protected $username;

/**
 * @Column(type="string", length=64, nullable=false)
 */
protected $password;

/**
 * @Column(type="string", length=255, unique=true, nullable=false)
 */
protected $email;

/**
 * The @JoinColumn is not necessary in this example. When you do not specify
 * a @JoinColumn annotation, Doctrine will intelligently determine the join
 * column based on the entity class name and primary key.
 *
 * @ManyToOne(targetEntity="Group")
 * @JoinColumn(name="group_id", referencedColumnName="id")
 */
protected $group;

}

/**
 * @Entity
 * @Table(name="group")
 */
class Group
{

/**
 * @Id
 * @Column(type="integer", nullable=false)
 * @GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @Column(type="string", length=32, unique=true, nullable=false)
 */
protected $name;

/**
 * @OneToMany(targetEntity="User", mappedBy="group")
 */
protected $users;

}
  • 在db中创建我的架构没有问题:php cli.php orm:schema-tool:create
  • 在“使用条款”设置下完成了最后一步
  • 在我的控制器中使用以下代码尝试,并收到错误

    $em = $this->doctrine->em;
    
    $user = new models\User;
    $user->setUsername('Joseph');
    $user->setPassword('secretPassw0rd');
    $user->setEmail('josephatwildlyinaccuratedotcom');
    
    $em->persist($user);
    $em->flush();
    

可生产

Fatal error: Class 'models\User' not found in C:\wamp\www\ci\application\controllers\Home.php on line 11

我唯一的想法是路径中可能存在某些东西,因为我在Windows中或者我将实体模型放在错误的位置。

1 个答案:

答案 0 :(得分:1)

the tutorial you're following开始,有一个重要的设置:

// With this configuration, your model files need to be in
// application/models/Entity
// e.g. Creating a new Entity\User loads the class from
// application/models/Entity/User.php
$models_namespace = 'Entity';

这是您的Doctrine实体(模型)必须使用的命名空间,当您将namespace Entity;作为模型的第一行时,它看起来是正确的。您可以将其设置为您想要的任何内容。

使用此配置,您的模型文件需要位于application/models/Entity

创建实体实例时,请使用您配置的命名空间 - 而不是模型路径:

// $user = new models\User; "models" is not the right namespace
$user = new Entity\User;