我一直在关注运行Doctrine的一些教程,当我尝试将对象插入数据库时似乎挂断了。作为参考,这就是我所关注的:doctrine 2 tutorial
命名空间实体;
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;
}
在我的控制器中使用以下代码尝试,并收到错误
$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中或者我将实体模型放在错误的位置。
答案 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;