バージョン選択

フォーラム

メニュー

オンライン状況

98 人のユーザが現在オンラインです。 (88 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 97
tokita もっと...

サイト内検索

質問 > その他 > Entityのリレーションで値を直指定したい

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hono
投稿日時: 2023/5/26 11:38
対応状況: 解決済
新米
登録日: 2023/5/26
居住地:
投稿: 8
Entityのリレーションで値を直指定したい
いつもお世話になっております。

Entityのリレーションの設定方法で悩んでおります。
親のテーブル(tableA)にtypeとtype_idがあり
typeごとに子テーブル(typeが2ならtableBとか)があるのですが
この親子間でリレーションを張る方法がわかりません。

イメージ的には
from tableA a
Inner join tableB b on a.type = 2 and a.type_id = b.id

みたいな条件でリレーションを張りたいのですがa.type = 2のように値を直指定しての定義方法がわかりません。

何か解決策ありましたら御教授頂ければ幸いです。
mcontact
投稿日時: 2023/5/26 15:09
対応状況: −−−
登録日: 2022/1/22
居住地:
投稿: 1400
Re: Entityのリレーションで値を直指定したい
tableAテーブルの定義とtableBテーブルの定義が出来ているなら、下記のSQLを実行したい場合は、EntityファイルというよりはRepositoryファイルだと思いますが?

引用:
from tableA a
Inner join tableB b on a.type = 2 and a.type_id = b.id


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

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の記載ない事からどうやら自分の環境では動かないようです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は90,949名です
総投稿数は110,525件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1704
8
red
1571
9
mcontact
1400
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.