バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > その他 > 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
居住地: Tokyo
投稿: 712
Re: oneToManyでfindeしてもデータが取得できない
cascade: ["persist"]がないからでしょうか?

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


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


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

では出力されませんか?
hmorita_j
投稿日時: 2017/3/22 10:12
対応状況: −−−
一人前
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 130
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
居住地:
投稿: 140
Re: oneToManyでfindeしてもデータが取得できない
最初に提示いただいたdump結果は、このコードで出力したものですか?

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

eccube.repository.fortunetellerの定義が間違っているとか。
hmorita_j
投稿日時: 2017/3/24 12:24
対応状況: −−−
一人前
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 130
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
居住地:
投稿: 140
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ペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は20,120名です
総投稿数は82,932件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1644
4
yuh
1392
5
red
1066
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
784
10
468
712
11
umebius
712
12
tao_s
651
13 sumida 638
14
homan
633
15 karin 618
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

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

Copyright© LOCKON CO.,LTD. All Rights Reserved.