Kohana ORM Pivot表错误的数据

时间:2012-06-06 19:27:37

标签: php orm kohana pivot-table

我有用户,类别和帖子。用户有很多帖子,类别有很多帖子,帖子属于一个类别,一个用户。

我需要帮助用正确的帖子显示正确的用户。

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    

上面的代码将回显User One,User Two,NULL,NULL而不是User One,User One,User One,User Two。出于某种原因,它将Post One与User One和Post Two与User 2匹配,因为它们具有相同的ID号。

我做错了什么?

以下是回应:

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

1 个答案:

答案 0 :(得分:0)

当您需要跟踪多对多关系时,您只需要使用数据透视表,在这种情况下,没有多对多关系可以跟踪(只是一对多关系)。

首先,Post模型应该有字段user_idcategory_id作为外键来跟踪一对多关系。文档说明了如何构建模型,包括用户,类别,帖子示例(几乎与您尝试实现的完全相同): http://kohanaframework.org/3.2/guide/orm/relationships