タグ付けされた質問 「doctrine-orm」

Doctrine ORMはPHP ORMです。Doctrine 1.2はActive Recordパターンを使用しますが、Doctrine ORM 2以降はData Mapperパターンを使用します。Doctrineプロジェクトは、データベースの抽象化とPHPで書かれたオブジェクトリレーショナルマッピングを処理するためのオープンソースライブラリとツールのコレクションです。


14
Doctrine2:参照テーブルに列を追加して多対多を処理する最良の方法
Doctrine2で多対多のリレーションを処理するための最良で最もクリーンで最も簡単な方法は何だろうと思います。 メタリカのMaster of Puppetsのようないくつかのトラックのアルバムがあるとします。ただし、MetallicaのBatteryのように、1つのトラックが複数のアルバムに表示される場合があることに注意してください。このトラックは3つのアルバムで使用されています。 したがって、必要なのは、いくつかの追加の列(指定されたアルバム内のトラックの位置など)を含む3番目のテーブルを使用して、アルバムとトラックの多対多の関係です。実際、Doctrineのドキュメントが示唆しているように、私はその機能を実現するために二重の1対多の関係を使用する必要があります。 /** @Entity() */ class Album { /** @Id @Column(type="integer") */ protected $id; /** @Column() */ protected $title; /** @OneToMany(targetEntity="AlbumTrackReference", mappedBy="album") */ protected $tracklist; public function __construct() { $this->tracklist = new \Doctrine\Common\Collections\ArrayCollection(); } public function getTitle() { return $this->title; } public function getTracklist() { return $this->tracklist->toArray(); …

2
doctrine2でカスケードを削除する
親テーブルから行を削除し、Doctrine2を使用して子テーブルの一致する行を自動的に削除する方法を学ぶために、簡単な例を作ろうとしています。 ここに私が使用している2つのエンティティがあります: Child.php: <?php namespace Acme\CascadeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="child") */ class Child { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumns({ * @ORM\JoinColumn(name="father_id", referencedColumnName="id") * }) * * @var father */ private $father; } father.php …

10
Doctrine QueryBuilderで行を数える
私はDoctrineのQueryBuilderを使ってクエリを作成していて、クエリから結果の総数を取得したいと思っています。 $repository = $em->getRepository('FooBundle:Foo'); $qb = $repository->createQueryBuilder('n') ->where('n.bar = :bar') ->setParameter('bar', $bar); $query = $qb->getQuery(); //this doesn't work $totalrows = $query->getResult()->count(); このクエリでカウントを実行して合計行数を取得し、実際の結果は返さないようにしたいだけです。(このカウントクエリの後で、ページ付けのためにmaxResultsを使用してクエリをさらに変更します。)


13
Doctrine 2でWHERE INを使用する方法
私にエラーを与える次のコードがあります: Message: Invalid parameter number: number of bound variables does not match number of tokens コード: public function getCount($ids, $outcome) { if (!is_array($ids)) { $ids = array($ids); } $qb = $this->getEntityManager()->createQueryBuilder(); $qb->add('select', $qb->expr()->count('r.id')) ->add('from', '\My\Entity\Rating r'); if ($outcome === 'wins') { $qb->add('where', $qb->expr()->in('r.winner', array('?1'))); } if ($outcome === 'fails') { …

5
doctrine dqlクエリ結果として1次元スカラー配列を取得するにはどうすればよいですか?
オークションテーブルのid列から値の配列を取得したいのですが。これが生のSQLである場合、次のように記述します。 SELECT id FROM auction しかし、Doctrineでこれを実行して実行すると: $em->createQuery("SELECT a.id FROM Auction a")->getScalarResult(); 私はこのような配列を取得します: array( array('id' => 1), array('id' => 2), ) 代わりに、次のような配列を取得したいと思います。 array( 1, 2 ) Doctrineを使用してどうすればよいですか?
116 php  doctrine-orm 

2
Doctrine 2のプロキシとは何ですか?
私はすべてのDoctrine 2ドキュメントを読み終え、自分のサンドボックスを開始しました。ほとんどのプリンシペを理解しましたが、それでも質問があり、ドキュメントで完全な説明を見つけることができませんでした。 Proxyクラスとは? エンティティに対していつ使用する必要がありますか? 私が理解している限り、プロキシクラスはレイヤーを追加してエンティティに他のいくつかの機能を追加できるようにしますが、エンティティクラスにメソッド自体を実装する代わりにプロキシを使用するのはなぜですか?

12
findAll Doctrineのメソッドをソートする方法
私はDoctrineのドキュメントを読んでいますが、findAll()の結果をソートする方法を見つけることができませんでした。 私はsymfony2 + doctrineを使用しています、これは私のコントローラー内で使用しているステートメントです: $this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll(); しかし、私は結果をユーザー名の昇順で並べ替えたいです。 私はこの方法で配列を引数として渡そうとしました: findAll( array('username' => 'ASC') ); しかし、機能しません(文句も言われません)。 DQLクエリを作成せずにこれを行う方法はありますか?

1
Doctrine 2はmanyToOneリレーションでnullable = falseを使用できませんか?
アンはUser1持ってPackage、それに関連します。多くのユーザーが同じパッケージを参照できます。定義Userなしでは存在できませんPackage。User関係を所有する必要があります。関係は双方向であるため、にPackageは0人以上のユーザーがいます。 これらの要件は、につながるManyToOneため関係UserとOneToManyの関係Packageが教義2中package_idにuserできます(外部キーであること)テーブルnullの値を。私は設定しようとしましたnullable=falseが、コマンド: php app/console doctrine:generate:entities DL --path="src" --no-backup nullable関係には属性がないと言うManyToOne。私には何が欠けていますか? class User { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Package", inversedBy="users") */ private $package; } class Package { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToMany(targetEntity="User", mappedBy="package") */ private $users; …

4
inversedByとmappedByの違いは何ですか?
Zend Framework 2とDoctrine 2を使用してアプリケーションを開発しています。 注釈を足す間、私は違いを理解することができませんmappedByとしますinversedBy。 いつ使用すべきmappedByですか? いつ使用すべきinversedByですか? どちらを使用すればよいですか? 次に例を示します。 /** * * @ORM\OneToOne(targetEntity="\custMod\Entity\Person", mappedBy="customer") * @ORM\JoinColumn(name="personID", referencedColumnName="id") */ protected $person; /** * * @ORM\OneToOne(targetEntity="\Auth\Entity\User") * @ORM\JoinColumn(name="userID", referencedColumnName="id") */ protected $user; /** * * @ORM\ManyToOne (targetEntity="\custMod\Entity\Company", inversedBy="customer") * @ORM\JoinColumn (name="companyID", referencedColumnName="id") */ protected $company; 簡単な検索を行ったところ、次のことがわかりましたが、それでも混乱しています。 例1 例2 例3
102 php  doctrine-orm 

9
symfony2 doctrine2のvar_dumpでデータが多すぎます
私は約40のエンティティと多くの双方向の関係を持っています。var_dump($ user)または任意のエンティティを使用するたびに、配列と変数のデータが多すぎるブラウザーが読み込まれると、クラッシュしました。 私は問題をいただきたいです。 データは正常に挿入されています。本番環境で問題が発生する可能性がありますか?

7
「AUTO」戦略を使用する場合、DoctrineでIDを明示的に設定します
私のエンティティはそのIDにこの注釈を使用しています。 /** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="AUTO") */ protected $id; クリーンなデータベースから、古いデータベースの既存のレコードをインポートして、同じIDを保持しようとしています。次に、新しいレコードを追加するときに、MySQLに通常どおりID列を自動増分させます。 残念ながら、Doctrine2は指定されたIDを完全に無視しているようです。 新しいソリューション 以下の推奨事項に従って、以下が推奨されるソリューションです。 $this->em->persist($entity); $metadata = $this->em->getClassMetaData(get_class($entity)); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); $metadata->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator()); 古いソリューション Doctrineはジェネレーター戦略を決定するためにClassMetaDataからピボットするので、EntityManagerでエンティティを管理した後で修正する必要があります: $this->em->persist($entity); $metadata = $this->em->getClassMetaData(get_class($entity)); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); $this->em->flush(); 私はこれをMySQLでテストしたところ、期待どおりに機能しました。つまり、カスタムIDを持つエンティティはそのIDで保存され、IDが指定されていないエンティティはを使用していましたlastGeneratedId() + 1。

3
Doctrineと複合固有キー
教義で複合固有キーを作成したいと思います。それらは私の分野です: /** * @var string $videoDimension * * @Column(name="video_dimension", type="string", nullable=false) */ private $videoDimension; /** * @var string $videoBitrate * * @Column(name="video_bitrate", type="string", nullable=false) */ private $videoBitrate; 一緒に結合されたものが複合固有キーであることをどのようにして教えますか?

3
Symfony2とDoctrine-エラー:無効なPathExpression。StateFieldPathExpressionである必要があります
次のようなエンティティがあります。 /** * @Gedmo\Tree(type="nested") * @ORM\Table(name="categories") * @ORM\Entity() */ class Category extends BaseCategory { /** * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") */ protected $children; /** * @Gedmo\TreeParent * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL") */ protected $parent; } そして、私はこのようなクエリを実行しようとしています: $qb = $this->em->createQueryBuilder() ->select('c.parent') ->from('Category', 'c'); $result = $qb->getQuery()->getArrayResult(); ただし、次のエラーが発生します。 [Semantical Error] ... …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.