0

ユーザー、カテゴリ、投稿があります。ユーザーには多くの投稿があり、カテゴリには多くの投稿があり、投稿は1つのカテゴリと1つのユーザーに属しています。

正しい投稿で正しいユーザーを表示するためのサポートが必要です。

テーブル

categories{category_id, category_title}
posts{post_id, post_title}
users{user_id, user_title}
categories_posts{category_id, post_id}
users_posts{user_id, post_id}

モデル

class Model_User extends ORM {

protected $_primary_key = 'user_id';

protected $_has_many = array(
    'posts'=> array(
        'model' => 'post',                
        'through' => 'users_posts',   
        'far_key' => 'post_id'        
    ),
  );
}

class Model_Category extends ORM {

    protected $_primary_key = 'category_id';

    protected $_has_many = array(
    'posts'=> array(
        'model' => 'post',                
        'through' => 'categories_posts',   
        'far_key' => 'post_id'           
    )
  );
}

class Model_Post extends ORM {

    protected $_primary_key = 'post_id';

    protected $_belongs_to = array(
    'categories'=> array(
        'model' => 'category',               
        'through' => 'categories_forums',  
        'far_key' => 'category_id'  
    ),

    'users'=> array(
        'model' => 'user',                
        'through' => 'users_posts',    
        'far_key' => 'user_id'   
    )
  );
}

画面

$categories = ORM::factory('category')->find_all(); 
foreach ($categories as $category) :
echo $category->category_title;
foreach ($category->posts->find_all() as $post) :
echo $post->post_title;
echo $post->users->user_title;
endforeach;
endforeach;

カテゴリと投稿は正しくエコーしますが、ユーザーはエコーしません。

users_postsに次のものがあるとします。

user_id post_id
1      1
1      2
1      3
2      4    

上記のコードは、ユーザー1、ユーザー1、ユーザー1、ユーザー2の代わりに、ユーザー1、ユーザー2、NULL、NULLをエコーし​​ます。何らかの理由で、同じID番号を持っているため、PostOneとUserOneおよびPostTwoとUserTwoが一致します。

私は何が間違っているのですか?

エコーすると思われるものは次のとおりです。

Category One
Post One
User One
Post Two
User One

Category Two
Post Three
User One
Post Four
User Two

コードがエコーするものは次のとおりです。

Category One
Post One
User One
Post Two
User Two

Category Two
Post Three
NULL
Post Four
NULL
4

1 に答える 1

0

多対多の関係を追跡する必要がある場合にのみ、ピボットテーブルを実際に使用する必要があります。このシナリオでは、追跡する多対多の関係はありません(1対多の関係のみ)。

まず、Postモデルには、1対多の関係を追跡するためのフィールドuser_idと外部キーが必要です。category_idドキュメントでは、ユーザー、カテゴリ、投稿の例(達成しようとしているものとほぼ同じ)を使用して、モデルを構築する方法を説明しています:http: //kohanaframework.org/3.2/guide/orm/relationships

于 2012-06-07T12:52:23.893 に答える