1

Doctrine を実行するためのいくつかのチュートリアルに従っていますが、オブジェクトをデータベースに挿入しようとするとハングアップするようです。参考までに、これは私がフォローしていたものです: doctrine 2 tutorial

  • Doctrine は application/libraries フォルダーにインストールされます
  • Doctrine.php ブートストラップは application/libraries フォルダーにあります
  • application/ フォルダーに 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;

}
  • 問題なくデータベースに私のスキーマを作成しました: php cli.php orm:schema-tool:create
  • 「Doctrine の使用」設定で最後のステップを取得しました
  • コントローラーで次のコードを使用してみましたが、エラーが発生しました

    $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

私の唯一の考えは、私がウィンドウにいるため、またはエンティティモデルを間違った場所に置いたため、パスに何かがある可能性があるということです。

4

1 に答える 1

1

あなたがフォローしているチュートリアルから、重要な設定があります:

// 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';

namespace Entity;これは Doctrine エンティティ (モデル) が使用しなければならない名前空間であり、モデルの最初の行にあるように正しく実行しているように見えます。好きなように設定できます。

この構成では、モデル ファイルを次の場所に配置する必要があります。application/models/Entity

エンティティのインスタンスを作成するときは、モデル パスではなく、構成した名前空間を使用します。

// $user = new models\User; "models" is not the right namespace
$user = new Entity\User;
于 2012-12-27T17:03:50.740 に答える