バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > その他 > oneToManyでfindeしてもデータが取得できない

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
boonen
投稿日時: 2017/3/19 17:40
対応状況: −−−
半人前
登録日: 2017/3/7
居住地:
投稿: 15
oneToManyでfindeしてもデータが取得できない
[EC-CUBE] 3.0.14 新規インストール
[レンタルサーバ] さくらVPS
[OS] CentOS release 6.8
[PHP] PHP 7.0.16
[データベース] MySQL 5.1.73
[WEBサーバ] Apache/2.2.15
[ブラウザ] Chrome
[導入プラグインの有無] 無し
[カスタマイズの有無] 有り
[現象]
コアコードをカスタムしているのですが、oneToManyリレーションを張ってfindしてみても、リレーション先のテーブル取得ができません。
コアコードを見てみると、innnerjoinを多用しているようですが、そのようにしないといけないのでしょうか?
下記にymlと、findした変数のdump結果を貼り付けておきます。
find自体はできてるのですが、リレーション先のデータがnullになってしまっているのです。

Eccube\Entity\Tellerschedule:
    type: entity
    table: dtb_tellerschedule
    repositoryClass: Eccube\Repository\TellerscheduleRepository
    id:
中略・・
    manyToOne:
        Fortuneteller:
            targetEntity: Eccube\Entity\Fortuneteller
            inversedBy: Tellerschedule
            joinColumn:
                name: fortuneteller_id
                referencedColumnName: id

Eccube\Entity\Fortuneteller:
    type: entity
    table: dtb_fortuneteller
    repositoryClass: Eccube\Repository\FortunetellerRepository
    id: 
中略・・・
    oneToMany:
        Tellerschedule:
            targetEntity: Eccube\Entity\Tellerschedule
            mappedBy: Fortuneteller





(dump結果)
array:1 [▼
  0 => Tellerschedule {#1843 ▼
    -id: 4
    -fortuneteller_id: 4
中略・・・
    -update_date: DateTime {#1841 ▶}
    -Fortuneteller: Fortuneteller {#1863 ▼
      +__isInitialized__: false
      -id: 4
      -member_id: null
      -product_id: null
      -create_date: null
      -update_date: null
      -Member: null
      -Tellerschedule: null
       …2
    }
  }
]
umebius
投稿日時: 2017/3/20 16:35
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: oneToManyでfindeしてもデータが取得できない
cascade: ["persist"]がないからでしょうか?

dump結果がarrayになっているのも気になるので、find , dumpしているあたりのコードをご掲載いただけないでしょうか?


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

nyorai
投稿日時: 2017/3/22 9:24
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: oneToManyでfindeしてもデータが取得できない
dump($Tellerschedule->getFortuneteller()); 

では出力されませんか?
hmorita_j
投稿日時: 2017/3/22 10:12
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: oneToManyでfindeしてもデータが取得できない
データは正しく入っているのに取得できないということでしょうか?
dtb_tellerscheduleのfortuneteller_idにデータは入っていますか?
boonen
投稿日時: 2017/3/24 11:22
対応状況: −−−
半人前
登録日: 2017/3/7
居住地:
投稿: 15
Re: oneToManyでfindeしてもデータが取得できない
みなさま、ご回答ありがとうございます。
通知のチェックを入れ忘れていて、ご回答いただいていたことに気づけませんでした。申し訳有りません。

dump処理をしているコントローラーです。
仕方ないので、fortunetellerをfindしてから、tellerscheduleをfindするようにしています。

    public function index(Application $app, Request $request)
    {   
        $fortuneteller = $app['eccube.repository.fortuneteller']->findBy(array('member_id' => $app->user()->getId()));
        dump($fortuneteller);
        $Schedules = $app['eccube.repository.tellerschedule']->findBy(array('fortuneteller_id' => $fortuneteller[0]->getId()), array('date' => 'ASC'));

        $builder = $app['form.factory']->createBuilder();



データでは、fortuneteler_idはちゃんとはいっているので、とれるはずなのですが。。。
nyorai
投稿日時: 2017/3/24 11:48
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: oneToManyでfindeしてもデータが取得できない
最初に提示いただいたdump結果は、このコードで出力したものですか?

$fortunetellerをdumpしているのに、tellerscheduleが出力されているように見えますが...

eccube.repository.fortunetellerの定義が間違っているとか。
hmorita_j
投稿日時: 2017/3/24 12:24
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: oneToManyでfindeしてもデータが取得できない
dtb_fortunetellerのidのカラム名って何ですか?
もしfortuneteller_idだとすると、
referencedColumnName: idは
referencedColumnName: fortuneteller_idになると思います。
boonen
投稿日時: 2017/3/24 13:55
対応状況: −−−
半人前
登録日: 2017/3/7
居住地:
投稿: 15
Re: oneToManyでfindeしてもデータが取得できない
すみません、dump()の変数は$Scheduleでした。
質問時点から変更してしまっています。

        $fortuneteller = $app['eccube.repository.fortuneteller']->findBy(array('member_id' => $app->user()->getId()));
        $Schedules = $app['eccube.repository.tellerschedule']->findBy(array('fortuneteller_id' => $fortuneteller[0]->getId()), array('date' => 'ASC'));
        dump($Schedules);




dtb_fortuneteller のidのカラム名はidです。
nyorai
投稿日時: 2017/3/24 14:17
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: oneToManyでfindeしてもデータが取得できない
ありがとうございます。

oneToManyのリレーション先のデータがとれない、というのは、


$Schedules  = $fortuneteller->getTellerschedule();


のようなコードを書いたときに$Schedulesがnullになる、という意味ですか?
boonen
投稿日時: 2017/3/24 14:39
対応状況: −−−
半人前
登録日: 2017/3/7
居住地:
投稿: 15
Re: oneToManyでfindeしてもデータが取得できない
いえ、fortunetellerをfindした結果にtellerscheduleのデータが入れ子でカラム名は取得されているのにnullになっているのがおかしいと思ったのです。
oneToOneのリレーションの時はfind()で特に指定せずに取れていたので。

        $fortuneteller = $app['eccube.repository.fortuneteller']->findBy(array('member_id' => $app->user()->getId()));
        //$Schedules = $app['eccube.repository.tellerschedule']->findBy(array('fortuneteller_id' => $fortuneteller[0]->getId()), array('date' => 'ASC'));
        $Schedules  = $fortuneteller->getTellerschedule();
        dump($Schedules);



ご指摘いただいた方法ならできるのかと思い、上記のようなコードに書き換えてみたところ、以下のエラーがでました。

FatalThrowableError in TellerscheduleController.php line 43:
Call to a member function getTellerschedule() on array



何か定義が間違っているのでしょうか。。。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.