問題タブ [doctrine-query]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
doctrine-orm - doctrine2:クエリのさまざまな方法、さまざまな結果
誰かが説明できますか、なぜ私は異なる結果を得るのですか?
$result1だけが$userを保持しますが、これは私が期待したものであり、他はnullです。どうしたの?($ em-> flush();を呼び出す必要があるとは言わないでください。)
mysql - (任意の組み合わせではなく) リレーションのリスト全体が一致するすべての行を返します。
次の単純なテーブル構造を使用します。
タグ ID のリストがある場合、リスト内のタグのすべての行が一致するデータの行と関係があり、そのサブセットではない場合、データのすべての行を取得するにはどうすればよいですか?
これが私が今持っている、うまくいかないクエリです:
具体的には、タグ 1 または 2 に関連するデータの行を返すため、これは機能しません。1と2 ではありません。
mysql - DQL を使用してリレーショナル除算を実行するにはどうすればよいですか?
Doctrine 1.2 を使用してリレーショナル除算を実行しようとすると、以下のクエリで見つかった DISTINCT のように見えるものに対して「重複したエイリアス」エラーが表示されます。
クエリからDISTINCTを削除すると、クエリは実行されますが、必要なものが得られません。Doctrine でこの問題を解決する適切な方法はありますか?
特定のコード:
symfony - リレーションからエンティティのリストを取得する Symfony2 エンティティ フィールドを作成するにはどうすればよいですか?
私は 3 つのエンティティを持っています: 会社、部門、およびユーザー ユーザーは、会社と 1 対多の関係を持っています。部門は、会社とユーザーの両方との多対 1 の関係を分離しています
目標は、部門ごとに異なる部門を構成し、ユーザーが会社に属する部門から (プロファイルで) 選択できるようにすることです。
私は組み込みのエンティティフィールド タイプでこれを達成しようとしています。私の問題は、Symfony がフィールドをレンダリングするときに、ユーザーがそのユーザーの会社に属する部門だけでなく、任意の部門を選択できることです。
カスタム クエリを使用してみましたが、$company が存在しないというエラーが表示されます (関数内にあるにもかかわらず)。これは、カスタム クエリが独自のスコープを持つクロージャー内にあるためだと思います。
symfony - 関連エンティティフィールドのwhere句を含むDoctrineクエリブイダー
私には2つのエンティティがあります:Image
とTags
、多対多の関係があります。
Image
code
、、、および多対多の関係を実装するいくつかのフィールドがありますdescription
。author
tags
Tag
フィールドは2つだけです:name
とimages
。
私は非常に一般的な検索フォームを作成しています。入力フィールドだけで任意のテキストを入力できImage
、そのテキストが、、フィールドcode
、description
またはauthor
任意のタグname
フィールドに含まれているものが返されます。
非関係フィールドの場合、それは簡単です。私は自分のコントローラーにあります(query
検索に使用されるのは単なるde GETパラメーターです):
name
さて、の各フィールドの進め方がわかりませんtags
。
すべてのタグを文字列として返すエンティティで仮想フィールドを使用しようとしましたImage
が、後でクエリビルダーで使用できません。
どうもありがとう!
mongodb-php - Doctrine ODM: Cannot prime->(true) getSingleResult(); throws cursor error
I have a document that has a ReferenceMany attribute to another document. The reference is setup fine, and the data is returned from the query fine, but each document in the arraycollection is returned as a proxy. On this site, I saw it was mentioned I should add ->prime(true)
in order to return the actual referenced documents.
When that ArrayCollection of documents is returned, I am running a loop of ids I have submitted to the server to remove them from the referenced collection. The removeElement
method is not working b/c the returned documents are proxies, and I am comparing an actual document vs. those proxies. So basically I am trying to:
- Look up a single document
- Force all documents in the
ReferenceMany
attribute to be actual documents and not Proxy documents - Loop through my array of id's and load each document
- Send the document to the removeElement method
On the first getSingleResult
query method below, I am getting an error cannot modify cursor after beginning iteration
. I saw a thread on this site mention you should prime the results in order to get actual documents back instead of proxies, and in his example, he used getSingleResult
.
If I remove ->prime(true)
from the first query, it doesn't throw an error, yet it doesn't actually remove any elements even though I breakpoint on the method, compare the two documents, and the data is exactly the same, except in $this->target
they are Location
Proxy documents, and the loaded one is an actual Location
Document.
Can I prime the single result somehow so I can use the ArrayCollection
methods properly, or do I need to just do some for loop and compare ids?
UPDATE
So here is an update showing the problem I am having. While the solution below would work just using the MongoId(s), when I submit an actual Document class, it never actually removes the document. The ArrayCollection comes back from Doctrine as a PersistentCollection. Each element in $this->coll
is of this Document type:
And the actual Document is this:
The removeElement
method does an array_search like this:
So because the object types are not exactly the same, even though the proxy object should be inheriting from the actual Document I created, $key
always returns 0 (false), so the element is not removed. Everything between the two documents are exactly the same, except the object type.
Like I said, I guess I can do it by MongoId, but why isn't it working by submitting the entire object?
doctrine-orm - Doctrine 2 クエリ ビルダーとエンティティの永続化のパフォーマンス
要約: エンティティのリストを更新/フラッシュするのと、それぞれに対してクエリ ビルダーの更新を実行するのとでは、どちらが速いですか?
Doctrine ORM (バージョン 2.3) では次のような状況があります。
このようなテーブルがあります
このテーブルを使用して、架空の農場のレポートを並べ替えます。問題は、ユーザーが顧客に動物 (コアラ、ゾウ、オオカミ、ウシなど) を注文してもらいたいということです。現在、CONCAT または CASE を使用して DQL に重みを追加する可能性があります (例: 0002wolf、0001elephant)。私の経験では、これは構築するのが難しいかのどちらかであり、動作するようになったとき、結果セットは配列であり、コレクションではありませんでした。
したがって、これを解決するために、各レコードに「重み」フィールドを追加し、選択を実行する前に、それぞれに重みを割り当てます。
これは完全に機能します。競合状態を避けるために、これをトランザクション ブロック内に追加しました。
これは、同じレポートを生成する複数のユーザーを処理するため、より堅牢です。または、エンティティを次のように重み付けすることもできます。
質問:
1) 2 つの例のうち、どちらがより優れたパフォーマンスを発揮しますか?
2)結果としてコレクションが必要であることを念頭に置いて、これを行うための3番目またはより良い方法はありますか?
これは単なる例であることに注意してください。結果セットをメモリ内でソートすることはオプションではありません。データベース レベルで実行する必要があります。実際のステートメントは、5 つの orderby を持つ 10 テーブルの結合です。
mysql - DoctrineQueryBuilderの式mysqlNOW()
doctrine querybuilderで式mysqlNOW()を使用するにはどうすればよいですか?
php - 複数のdbスキーマを使用してDoctrineクエリを管理する方法
ManyToOneとBの関係を持つエンティティAがありますが、AとBは同じDBスキーマに属していません。
エンティティ「A」はMyBundleバンドルに属し、エンティティ「B」はMyOtherBundleバンドルに属します。
公式ドキュメントでは、さまざまな接続を操作する方法について説明しています。複数のスキーマ=複数のエンティティマネージャー。しかし、私の場合は、両方のエンティティに参加したいと思います。
することによって:
また
私は自分のリポジトリの1つだけを呼び出しますが、config.ymlでは1つの接続しか選択できないため、彼はもう1つを取得できないと思います。
結果:おっと、何かがうまくいかなかったようです。
1 / 1ReflectionException:クラスFQCN \ Of \ MyBundle \ Entity\Bが存在しません..。
「私はそれが存在しないことを知っています、私はあなたに今良い場所を見て欲しいです:FQCN \ Of \ MyOtherBundle \ Entity\Bのように」
エンティティ「B」へのパスを強制するにはどうすればよいですか?
doctrine-orm - 複数の結合を使用してこの教義クエリを作成するにはどうすればよいですか?
エンティティNotificationTypeに関連するエンティティNotificationsに関連するエンティティPerson(p)があります。
- タイプ1の通知を受け取った人もいます(notification_type_id = 1)。
- 一部は通知を受信しましたが、タイプ1ではありません
- メッセージをまったく受信していないものもあります。
グローバルに、タイプ1のメッセージを受信していない人を検索したいと思います。
私はこのクエリを書きました:
しかし、このクエリでは、通知を受け取ったがタイプ1は受け取っていない人だけを取得し、通知をまったく受信していない人は取得しません。
クエリを修正してそれらを含めるにはどうすればよいですか?
あなたの助けをどうもありがとう