0

One、Two、Three の 3 つのモデルがあるとします。

モデル ワンには多くのスリーがあり、モデル ツーには多くのスリーがあり、スリーはワンとツーに属しています。

モデル:

class Model_One extends ORM {

protected $_primary_key = 'one_id';

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

class Model_Two extends ORM {

protected $_primary_key = 'two_id';

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

class Model_Three extends ORM {

protected $_primary_key = 'three_id';

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

'twos'=> array(
        'model' => 'two',                
        'through' => 'twos_threes',    
        'far_key' => 'two_id',       
        'foreign_key' => 'three_id'   
        ),
);
}

One、Two、Three を表示します。

$getTwos=ORM::factory('two')->find_all(); 

foreach($getTwos as $getTwo)
{
   echo $getTwo->two_category_title;
   foreach($getTwo->three->find_all() as $getThree)
   {
       echo $getThree->three_title;
       echo $getThree->one->one_author; 
   }
}

著者 A と B があり、タイトル 1、タイトル 2、タイトル 3、およびタイトル 4 があるとします。A にはタイトル 1、2、3 があり、B にはタイトル 4 があります。

問題は echo $getThree->one->one_author; です。A、B、NULL、NULL をエコーし​​ます。

情報を正しくエコーするにはどうすればよいですか?

4

1 に答える 1

1

モデルのリレーション定義が正しくありませんThree。モデルについても同じように、 Onehas および many に属しているようですThrees(HABTM または「has many through」) 。Two必要なものは次のとおりです。

class Model_Three extends ORM {

protected $_primary_key = 'three_id';

protected $_has_many = array(
    'ones'=> array(
        'model' => 'one',                
        'through' => 'ones_threes',    
        'far_key' => 'one_id',       
        'foreign_key' => 'three_id'   
        ),

    'twos'=> array(
        'model' => 'two',                
        'through' => 'twos_threes',    
        'far_key' => 'two_id',       
        'foreign_key' => 'three_id'   
        ),
    );
}

PS。プロパティforeign_keyですでに定義しているため、オプションです。$_primary_key

PPS。「投稿は 1 人のユーザーのみに属する」関係の例を次に示します。

class Model_User extends ORM {

   protected $_has_many = array(
      'posts' => array(),
   );
}

class Model_Post extends ORM {

   protected $_belongs_to = array(
      'author' => array(
          'model'       => 'user',
          // ignore if you have a `author_id` foreign key
          'foreign_key' => 'user_id', 
      ),
   );

   protected $_has_many = array(...);
}

// usage
$post = ORM::factory('post', 1);
echo $post->author->username;
$post->author = ORM::factory('user', 1);
$user = ORM::factory('user', 1);
foreach($user->posts->where('published', '=', 1)->find_all() as $posts) {
    echo $post->title;
}
于 2012-06-01T05:31:57.067 に答える