0

これにアプローチする方法がわかりません。

A、B、C の 3 つのモデルがあるとします。

モデル A には多数の C があり、モデル B には多数の C があり、C は A と B に属しています。

Bはすべて取得しています。

$getBs=ORM::factory('B')->find_all(); 

A、B、Cを表示しています。

foreach($getBs as $getB)
{
    echo $getB->b_category_title;
    foreach($getB->C->find_all() as $getC)
    {
        echo $getC->c_title;
        echo $getA->a_author; //Problem part
    }
}

モデル C の情報を表示するときに、モデル A にアクセスしてモデル C に接続する方法がわかりません。

編集

動作するコードを取得するために、モデル A ~ C をモデル 1 ~ 3 に変更します。

_load_with の biakaveron の例を使用すると、次のエラーが発生します。

Database_Exception [ 1054 ]: Unknown column 'three.id_c' in 'on clause' [ SELECT `ones`.`a_id` AS `ones:a_id`, `ones`.`a_author` AS `ones:a_author`, `three`.* FROM `threes` AS `three` JOIN `twos_threes` ON (`twos_threes`.`id_c` = `three`.`c_id`) LEFT JOIN `ones` AS `ones` ON (`ones`.`a_id` = `three`.`id_c`) WHERE `twos_threes`.`id_b` = '1' ]

モデル:

class Model_One extends ORM {

protected $_primary_key = 'a_id';

protected $_has_many = array(
    'threes'=> array(
        'model' => 'three',                
        'through' => 'ones_threes',   
        'far_key' => 'id_c',       
        'foreign_key' => 'id_a'   
        ),
    );
}

class Model_Two extends ORM {

protected $_primary_key = 'b_id';

protected $_has_many = array(
    'threes'=> array(
        'model' => 'three',                
        'through' => 'twos_threes',   
        'far_key' => 'id_c',       
        'foreign_key' => 'id_b'   
        ),
    );
}

class Model_Three extends ORM {

protected $_primary_key = 'c_id';

protected $_belongs_to = array(
    'ones'=> array(
        'model' => 'one',                
        'through' => 'ones_threes',    
        'far_key' => 'id_a',       
        'foreign_key' => 'id_c'   
        ),

'twos'=> array(
        'model' => 'two',                
        'through' => 'twos_threes',    
        'far_key' => 'id_b',       
        'foreign_key' => 'id_c'   
        ),
);

protected $_load_with = array('ones');
}

なぜ three.id_c を探しているのですか?

4

1 に答える 1

2

C は A と B に属します。

foreach($getBs as $getB)
{
    echo $getB->b_category_title;
    foreach($getB->C->find_all() as $getC)
    {
        echo $getC->c_title;
        echo $getC->A->a_author; 
    }
}

PS。ただのメモ。$_load_withプロパティを使用して、C オブジェクトと A オブジェクトの両方をロードできます。

class Model_C extends ORM {
    // ...
    protected $_load_with = array('A');
    // ...
}
于 2012-05-17T06:29:12.197 に答える