バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hono
投稿日時: 2023/5/26 11:38
対応状況: −−−
新米
登録日: 2023/5/26
居住地:
投稿: 3
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
居住地:
投稿: 629
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
居住地: 東京都
投稿: 14
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
居住地:
投稿: 3
Re: Entityのリレーションで値を直指定したい
mcontact 様

ご返答ありがとうございます。

今回聞きたかったのは、tableAのEntityのメンバとしてtableBのEntityを定義する方法でした。

質問の仕方が拙く誤解を生み申し訳ありませんでした。
hono
投稿日時: 2023/5/29 12:52
対応状況: 解決済
新米
登録日: 2023/5/26
居住地:
投稿: 3
Re: Entityのリレーションで値を直指定したい
テーブル定義的に見直し、
今回はtableBのカラムにtableAIDとして定義することで自己解決いたしました。

ご回答いただいた皆様ありがとうございました。
また何かございましたらよろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は80,468名です
総投稿数は106,843件です

投稿数ランキング

1
seasoft
7334
2
468
3217
3
AMUAMU
2712
4
nanasess
2280
5
umebius
2085
6
yuh
1776
7
red
1558
8
h_tanaka
1308
9
tsuji
957
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17
mcontact
629
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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