0

結合フィールドを含むCodeIgniterDatamapperORMクエリの作成についてサポートが必要です。私は商人のテーブルとベンダーのテーブルを持っています。彼らは多対1の関係を持っています。つまり、多くの商人は単一のベンダーの一部です。

したがって、DatamapperORM規則に従った私の日付ベーステーブルは次のとおりです。

商人

ベンダー

Merchants_vendors

さらに、merchants_vendorsテーブルには、結合フィールド「role」と「admin」があります。明らかに、このデータは結合テーブルに配置する必要があります。Merchantsテーブルに配置した場合、ベンダーごとに役割と管理者を定義することはできません。

最後に、マーチャントは1対1の関係でユーザーと関係があります。マーチャントはユーザーの単なる拡張と考えてください。

このデータ構造に従うデータからPHP配列を作成しようとしていますが、ロールフィールドと管理フィールドが正しく入力されていないようです。簡単にするために、冗長な列を削除しました。

[vendor] => Array
        (
            [id] => 1
            [name] => Vendor1
            [users] => Array
                (
                    [0] => Array
                        (
                            [id] => 277
                            [username] => merchant1
                            [firstname] => Merchant1
                            [merchant] => Array
                                (
                                    [id] => 1
                                    [user_id] => 277
                                    [role] => Sales
                                    [admin] => 0
                                )

                        )

                    [1] => Array
                        (
                            [id] => 282
                            [username] => merchant2
                            [firstname] => Merchant2
                            [merchant] => Array
                                (
                                    [id] => 2
                                    [user_id] => 282
                                    [role] => Software
                                    [admin] => 1
                                )

                        )

                )

        )

これが私が使用しているコードです-ベンダーIDを知っていると仮定します:

$v = new Vendor($id);
if($v->exists())
{
    $d['vendor'] = $v->to_array();
    $m = new Merchant();
    $m->where_related_vendor('id', $v->id)->get();
    if($m->exists())
    {
        foreach($m as $mK => $mV)
        {  
            $u = new User();
            $u->where_related_merchant('id', $mV->id)->get();
            $d['vendor']['users'][$mK] = $u->to_array();
            $d['vendor']['users'][$mK]['merchant'] = $mV->to_array();
        }
    }
}
$this->load->view('myview', $d);

これにより、ロールと管理者がいない上記のPHPデータ構造に到達できます。 私はそのinclude_join_fields()機能をよく知っていますが、それを機能させることができないようです。具体的には、$m->vendor->include_join_fields();Thenを試してから役割/管理フィールドにアクセスしようとしまし$mV->vendor->join_role$mV->vendor->join_adminが、それは機能しません。

あなたの助けは大歓迎です!

4

2 に答える 2

0

解決策は、forループ内の$ mVオブジェクトでinclude_join_fields()を使用することでした。

$v = new Vendor($id);
if($v->exists())
{
    $d['vendor'] = $v->to_array();
    $m = new Merchant();
    $m->where_related_vendor('id', $v->id)->get();
    if($m->exists())
    {
        foreach($m as $mK => $mV)
        {  
            $u = new User();
            $u->where_related_merchant('id', $mV->id)->get();

            $mV->vendor->where('id', $v->id)->include_join_fields();

            $d['vendor']['users'][$mK] = $u->to_array();
            $d['vendor']['users'][$mK]['merchant'] = $mV->to_array();
            $d['vendor']['users'][$mK]['merchant']['role'] = $mV->vendor->join_role;
            $d['vendor']['users'][$mK]['merchant']['admin'] = $mV->vendor->join_admin;
        }
    }
}
$this->load->view('myview', $d);

CodeIgniterフォーラムで進行中の議論。

到着次第、詳細を掲載します。

于 2011-11-22T08:42:36.673 に答える
0

include_join_fields()は何も実行せず、これらのフィールドを含めるフラグを設定するだけです。

上記の両方の例は、実際にクエリを実行するget()を見逃しています...

于 2011-12-23T20:14:33.963 に答える