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

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(); …

19
Doctrine-準備されたステートメントだけでなく、実際のSQLを出力する方法は?
PHP ORMであるDoctrineを使用しています。私はこのようなクエリを作成しています: $q = Doctrine_Query::create()->select('id')->from('MyTable'); 次に、関数に、次のようにさまざまなwhere句や必要なものを追加します $q->where('normalisedname = ? OR name = ?', array($string, $originalString)); 後で、execute()そのクエリオブジェクトを実行する前に、生のSQLを印刷して調べて、これを実行します。 $q->getSQLQuery(); ただし、これは準備されたステートメントのみを出力し、完全なクエリは出力しません。MySQLに何が送信されているのかを確認したいのですが、代わりにを含む準備済みステートメントを出力してい?ます。「完全」クエリを確認する方法はありますか?

10
PHP ORM:DoctrineとPropel
私はsymfonyで新しいプロジェクトを始めています。これはDoctrineとPropelと簡単に統合できますが、もちろん選択をする必要があります。これら二つのどちらか? どうもありがとう。 編集: すべての応答、便利なものをありがとう。この質問に対する正しい答えはないので、最も人気のある投票を獲得した質問を承認済みとしてマークします。
126 php  orm  symfony1  doctrine  propel 

5
Doctrineで複数の列で並べ替え
2つの列でデータを並べ替える必要があります(行の列番号1の値が異なる場合はそれで並べ替え、それ以外の場合は列番号2で並べ替え) を使用しQueryBuilderてクエリを作成しています。 このorderByメソッドをもう一度呼び出すと、以前に指定した順序が置き換えられます。 最初のパラメーターとして2つの列を渡すことができます。 ->orderBy('r.firstColumn, r.secondColumn', 'DESC'); しかし、2番目のパラメーターに2つの順序付け方向を渡すことはできないため、このクエリを実行すると、最初の列は昇順で、2番目の列は降順で並べられます。どちらも降順で使いたいです。 これを使用してこれを行う方法はありQueryBuilderますか?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; …


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。

1
カスケード= {「削除」} VS orphanRemoval = true VS ondelete = "CASCADE
親エンティティが削除されたときに自動的に子エンティティを削除するために、以下の方法についていくつかの情報を収集しようとしました。最も一般的な方法は、cascade = {"remove"} OR orphanRemoval = true OR ondelete = "CASCADE"の 3つのアノテーションを使用することです。 私は3番目のものについて少し混乱しています:ondelete = "CASCADE"、これに関する教義の公式ドキュメントの説明は非常に少ないため)、私が収集した以下の情報を誰かが私に確認し、私の研究から理解できれば幸いですネットと経験... 何をする Cascade = {"remove"} ==>所有側エンティティがある場合、反対側のエンティティは削除されます。あなたが他の所有する側の実体を持つmanytomanyにいる場合でも。 -コレクションで使用する必要があります(OneToManyまたはManyToMany関係で)-ORMでの 実装 orphanRemoval = true ==>所有側エンティティがANDであり、他の所有側エンティティに接続されていない場合、反対側のエンティティは削除されます。( ref。doctrine official_doc -ORMでの実装-OneToOne、OnetoManyまたはManyToManyで使用できます onDelete = "CASCADE" ==>これにより、データベース内の外部キー列にOn Delete Cascadeが追加されます -この戦略は、正しく理解するのが少し難しいですが、非常に強力で高速です。( ref。doctrine official_doc ...しかし、これ以上の説明は読んでいません)-ORM は(以前の2つの方法と比較して)必要な作業が少ないため、パフォーマンスが向上します。 その他の情報 -これらの3つの方法はすべて双方向関係エンティティに実装されています(そうですか???)。 cascade = {"remove"}を使用すると、外部キーonDelete = CASCADEが完全にバイパスされます。(参考文献doctrine_official_doc) コードでの使用例 orphanRemovalおよびcascade = …

2
Doctrine hydrationとは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 doctrineのドキュメントでハイドレーションについて読みましたが、それが何であるかまだ理解できません。 誰かが説明してもらえますか?

12
Symfony 2.0 AJAXアプリケーションでDoctrineエンティティをJSONにエンコードする方法は?
ゲームアプリを開発していて、Symfony 2.0を使用しています。バックエンドへのAJAXリクエストがたくさんあります。そして、より多くの応答がエンティティをJSONに変換しています。例えば: class DefaultController extends Controller { public function launchAction() { $user = $this->getDoctrine() ->getRepository('UserBundle:User') ->find($id); // encode user to json format $userDataAsJson = $this->encodeUserDataToJson($user); return array( 'userDataAsJson' => $userDataAsJson ); } private function encodeUserDataToJson(User $user) { $userData = array( 'id' => $user->getId(), 'profile' => array( 'nickname' => $user->getProfile()->getNickname() ) …

11
Doctrine2エンティティの変更/更新されたすべてのフィールドを取得する組み込みの方法はありますか
エンティティを取得し、$eセッターでその状態を変更するとします。 $e->setFoo('a'); $e->setBar('b'); 変更されたフィールドの配列を取得する可能性はありますか? 私の例の場合foo => a, bar => b、結果として取得したい PS:はい、すべてのアクセサーを変更してこの機能を手動で実装できることはわかっていますが、これを行うための便利な方法を探しています

1
非推奨:番号を認識させないDoctrine \ ORM \ Mapping \ UnderscoreNamingStrategyは非推奨です
私はSymfony 4.3.8を使用していますが、これらの非推奨に関する情報が見つかりません。 ユーザー非推奨:番号を認識させずにDoctrine \ ORM \ Mapping \ UnderscoreNamingStrategyを作成することは非推奨であり、Doctrine ORM 3.0で削除されます。 番号を認識させずにDoctrine \ ORM \ Mapping \ UnderscoreNamingStrategyを作成することは非推奨であり、Doctrine ORM 3.0で削除されます。 私はスタックトレースで検索し、これを見つけました: class UnderscoreNamingStrategy implements NamingStrategy { private const DEFAULT_PATTERN = '/(?<=[a-z])([A-Z])/'; private const NUMBER_AWARE_PATTERN = '/(?<=[a-z0-9])([A-Z])/'; /** * Underscore naming strategy construct. * * @param int $case CASE_LOWER | CASE_UPPER …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.