質問 > その他 > Entityのリレーションで値を直指定したい |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
hono |
投稿日時: 2023/5/26 11:38
対応状況: 解決済
|
新米 登録日: 2023/5/26 居住地: 投稿: 8 |
Entityのリレーションで値を直指定したい いつもお世話になっております。
Entityのリレーションの設定方法で悩んでおります。 親のテーブル(tableA)にtypeとtype_idがあり typeごとに子テーブル(typeが2ならtableBとか)があるのですが この親子間でリレーションを張る方法がわかりません。 イメージ的には
みたいな条件でリレーションを張りたいのですがa.type = 2のように値を直指定しての定義方法がわかりません。 何か解決策ありましたら御教授頂ければ幸いです。 |
mcontact |
投稿日時: 2023/5/26 15:09
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1536 |
Re: Entityのリレーションで値を直指定したい tableAテーブルの定義とtableBテーブルの定義が出来ているなら、下記のSQLを実行したい場合は、EntityファイルというよりはRepositoryファイルだと思いますが?
引用: from tableA a
|
akako152 |
投稿日時: 2023/5/26 18:52
対応状況: 解決済
|
半人前 登録日: 2021/4/7 居住地: 東京都 投稿: 16 |
Re: Entityのリレーションで値を直指定したい Entityのリレーションを設定する方法についてですが、ECCubeではDoctrine ORMを使用しており、リレーションを定義することができます。親テーブル(tableA)と子テーブル(tableB)のリレーションを張るためには、以下の手順を試してみてください。
エンティティクラス(Entity Class)にリレーションを定義します。親エンティティクラス(tableA)内に子エンティティクラス(tableB)とのリレーションを追加します。例えば、OneToManyやManyToOneのリレーションを使用することができます。 リレーションのカラムを指定します。親エンティティクラス内でtypeとtype_idのカラムに関連付けを行います。これにより、親エンティティと子エンティティの関連付けが可能になります。 例えば、以下のようにリレーションを設定することができます: // tableAエンティティクラス class TableA { // ... /** * @ORM\ManyToOne(targetEntity="TableB") * @ORM\JoinColumn(name="type_id", referencedColumnName="id") */ private $tableB; // ... } // tableBエンティティクラス class TableB { // ... /** * @ORM\OneToMany(targetEntity="TableA", mappedBy="tableB") */ private $tableAs; // ... } このようにリレーションを定義することで、親エンティティ(tableA)と子エンティティ(tableB)の関連付けが行われます。 もし、a.type = 2のように値を直接指定してリレーションを定義したい場合は、以下のようにカスタムクエリを使用することもできます: // tableAエンティティクラス class TableA { // ... /** * @ORM\ManyToOne(targetEntity="TableB") * @ORM\JoinColumn(name="type_id", referencedColumnName="id") * @ORM\JoinTable(name="tableB", joinColumns={@ORM\JoinColumn(name="type_id", referencedColumnName="id", nullable=false)}) * @ORM\Where("type = 2") */ private $tableB; // ... } こちらの方法では、type = 2の条件でリレーションが設定されます。 |
hono |
投稿日時: 2023/5/29 12:45
対応状況: −−−
|
新米 登録日: 2023/5/26 居住地: 投稿: 8 |
Re: Entityのリレーションで値を直指定したい mcontact 様
ご返答ありがとうございます。 今回聞きたかったのは、tableAのEntityのメンバとしてtableBのEntityを定義する方法でした。 質問の仕方が拙く誤解を生み申し訳ありませんでした。 |
hono |
投稿日時: 2023/5/29 12:52
対応状況: 解決済
|
新米 登録日: 2023/5/26 居住地: 投稿: 8 |
Re: Entityのリレーションで値を直指定したい テーブル定義的に見直し、
今回はtableBのカラムにtableAIDとして定義することで自己解決いたしました。 ご回答いただいた皆様ありがとうございました。 また何かございましたらよろしくお願いします。 |
hono |
投稿日時: 2023/5/31 19:10
対応状況: 解決済
|
新米 登録日: 2023/5/26 居住地: 投稿: 8 |
Re: Entityのリレーションで値を直指定したい akako152様
ご返答ありがとうございます。 試してみましたがだめでした。 https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/annotations-reference.html こちらにもORM\Whereの記載ない事からどうやら自分の環境では動かないようです。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |