バージョン選択

フォーラム

メニュー

オンライン状況

79 人のユーザが現在オンラインです。 (63 人のユーザが フォーラム を参照しています。)
登録ユーザ: 3
ゲスト: 76
metro1111 boya minion もっと...

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
居住地:
投稿: 135
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
居住地:
投稿: 135
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
居住地:
投稿: 135
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ペイメント

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

統計情報

総メンバー数は19,785名です
総投稿数は82,479件です

投稿数ランキング

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


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.