28245


FuelPHPの中間テーブルを  
↓のような関係のテーブルを想定しています。

Aテーブル(マスタ)

[code]

    id, name, created_at, updated_at, deleted_at
    
[/code]

Bテーブル

[code]

    id, a_id, c_id, created_at, updated,at, deleted_at 
    
[/code]

Cテーブル(マスタ)

[code]

    id, name, created_at, updated_at, deleted_at
    
[/code]

C_IDをキーにして、Aに紐づくすべてのa.nameを取得したいと考えているのですが、  
ORMをつかって取得することは可能でしょうか？

[code]

    $orm_model = \Model\Bs::find('all',
                array(
                    'select'  => 'a.name',
                    'related' => array(
                        'a' => array(
                            'join_type' => 'left',
                        )
                    ),
                    'where' => array(
                        array('c_id', $c_id)
                    )
                )
            );
    
[/code]

色々調査してみましたが、↑のような書き方をするとa.nameがNULLで取得されます。  
ORMを使ってa.nameを取得する方法を教えてください。よろしくお願いします。


CC BY-SA 3.0
2016-07-01T10:28:36.840
27249
2016-08-14T02:09:24.043
2016-07-04T01:18:31.237
7918
7918
question
php fuelphp orm
FuelPHPのORMの中間テーブルに別テーブルを結合してその別テーブルの値を取得したい。


サブクエリ、もしくはカスタムSQLで対処するという選択ではダメでしょうか！？

<http://fuelphp.jp/docs/1.8/packages/orm/crud.html>

あとは、FuelphpのDBクラスを使用して書くのもありかと思います。  
<http://fuelphp.jp/docs/1.8/classes/database/db.html>


CC BY-SA 3.0
2016-07-04T00:37:54.227
27315
2016-07-04T00:37:54.227
3679
27249
answer


自己解決したので原因を書きます。FuelPHPのキャッシュの問題だったようです。  
下のような条件で検索した場合

Bテーブル

[code]

    id, a_id, c_id, created_at, updated,at, deleted_at 
    
    $orm_model = \Model\Bs::find('all',
                array(
                    'select'  => 'a_id',
                    'where' => array(
                        array('id', $id)
                    )
                )
            );
    
[/code]

↑の条件でSQLを流すと  
id, a_idに値は入りますが、  
c_id, created_at, updated,at, deleted_at にはNULLが入ったデータが取得されます。  
上のSQLを流した後に検索条件を変えないで、  
取得する文言を変えたSQLを流そうとすると

[code]

    $orm_model = \Model\Bs::find('all',
                array(
                    'select'  => 'c_id',
                    'where' => array(
                        array('id', $id)
                    )
                )
            );
    
[/code]

SQLは発行されずに、  
id, a_idに値が入っており、c_id, created_at, updated,at, deleted_at
にはNULLが入っているキャッシュからデータが取得されるので、  
c_idはNULLが取得されるのでおかしな挙動をするようでした。

解決策はDBクラスのクエリビルダを使うことで回避しました。


CC BY-SA 3.0
2016-08-14T02:09:24.043
28245
2016-08-14T02:09:24.043
7918
27249
answer