使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?
这是之前开的一个问题的后续,参考链接
我使用的是 symfony2
、donctrine
,里面关于数据库的操作,全部用的实体,官方推荐建立表与表之间的关系,我做了一些更改后,发现一个实体无法设置两个多对一的关系,下面是问题的描述与再现:
鉴于上一问题大家不推荐使用物理外健,我做了一些程序方面的处理:
删除数据表物理外健;
在程序中设置相应的实体关系;
简单的ER图更新:
商品属性关联表goods_and_attribute
相对于商品表goods
以及attributes
是多对一的关系啊,所以我在实体文件中添加以下程序:
<code>#src/AppBundle/Resources/config/doctrine/GoodsAndAttribute.orm.yml AppBundle\Entity\GoodsAndAttribute: type: entity table: goods_and_attribute id: ... fields: ... manyToOne: goods: targetEntity: Goods inversedBy: goodsAndAttribute joinColumn: name: goods_id referencedColumnName: id manyToOne: attribute: targetEntity: Attributes inversedBy: goodsAndAttribute joinColum: name: attribute_id referencedColumnName: id lifecycleCallbacks: { } </code>
在查询数据表的时候我发现只能得到其中一个关系的信息:
<code> $query = $em ->createQuery( 'SELECT ga FROM AppBundle:GoodsAndAttribute ga WHERE ga.id = 1'); </code>
在orm
中如何关联多个表,实现相应信息的查询?例如
<code>$query = $em ->createQuery( 'SELECT ga, g, a FROM ApplicationSonataMallBundle:GoodsAndAttribute ga JOIN ga.goods g JOIN ga.attribute a WHERE ga.id = 1'); </code>
回复内容:
这是之前开的一个问题的后续,参考链接
我使用的是 symfony2
、donctrine
,里面关于数据库的操作,全部用的实体,官方推荐建立表与表之间的关系,我做了一些更改后,发现一个实体无法设置两个多对一的关系,下面是问题的描述与再现:
鉴于上一问题大家不推荐使用物理外健,我做了一些程序方面的处理:
删除数据表物理外健;
在程序中设置相应的实体关系;
简单的ER图更新:
商品属性关联表goods_and_attribute
相对于商品表goods
以及attributes
是多对一的关系啊,所以我在实体文件中添加以下程序:
<code>#src/AppBundle/Resources/config/doctrine/GoodsAndAttribute.orm.yml AppBundle\Entity\GoodsAndAttribute: type: entity table: goods_and_attribute id: ... fields: ... manyToOne: goods: targetEntity: Goods inversedBy: goodsAndAttribute joinColumn: name: goods_id referencedColumnName: id manyToOne: attribute: targetEntity: Attributes inversedBy: goodsAndAttribute joinColum: name: attribute_id referencedColumnName: id lifecycleCallbacks: { } </code>
在查询数据表的时候我发现只能得到其中一个关系的信息:
<code> $query = $em ->createQuery( 'SELECT ga FROM AppBundle:GoodsAndAttribute ga WHERE ga.id = 1'); </code>
在orm
中如何关联多个表,实现相应信息的查询?例如
<code>$query = $em ->createQuery( 'SELECT ga, g, a FROM ApplicationSonataMallBundle:GoodsAndAttribute ga JOIN ga.goods g JOIN ga.attribute a WHERE ga.id = 1'); </code>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

MySQLプライマリキーは、データベース内の各行を一意に識別するキー属性であるため、空にすることはできません。主キーが空になる可能性がある場合、レコードを一意に識別することはできません。これにより、データの混乱が発生します。一次キーとして自己挿入整数列またはUUIDを使用する場合、効率やスペース占有などの要因を考慮し、適切なソリューションを選択する必要があります。

MySQLの起動が失敗する理由はたくさんあり、エラーログをチェックすることで診断できます。一般的な原因には、ポートの競合(ポート占有率をチェックして構成の変更)、許可の問題(ユーザー許可を実行するサービスを確認)、構成ファイルエラー(パラメーター設定のチェック)、データディレクトリの破損(テーブルスペースの復元)、INNODBテーブルスペースの問題(IBDATA1ファイルのチェック)、プラグインロード障害(エラーログのチェック)が含まれます。問題を解決するときは、エラーログに基づいてそれらを分析し、問題の根本原因を見つけ、問題を防ぐために定期的にデータをバックアップする習慣を開発する必要があります。

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

MySQLはJSONデータを返すことができます。 json_extract関数はフィールド値を抽出します。複雑なクエリについては、Where句を使用してJSONデータをフィルタリングすることを検討できますが、そのパフォーマンスへの影響に注意してください。 JSONに対するMySQLのサポートは絶えず増加しており、最新バージョンと機能に注意を払うことをお勧めします。

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

生産環境の場合、パフォーマンス、信頼性、セキュリティ、スケーラビリティなどの理由により、通常、MySQLを実行するためにサーバーが必要です。サーバーには通常、より強力なハードウェア、冗長構成、より厳しいセキュリティ対策があります。小規模で低負荷のアプリケーションの場合、MySQLはローカルマシンで実行できますが、リソースの消費、セキュリティリスク、メンテナンスコストを慎重に考慮する必要があります。信頼性とセキュリティを高めるには、MySQLをクラウドまたは他のサーバーに展開する必要があります。適切なサーバー構成を選択するには、アプリケーションの負荷とデータボリュームに基づいて評価が必要です。
