Php Kohana ORM数据透视表错误数据
我有用户、类别和帖子。用户有很多帖子,类别有很多帖子,帖子属于一个类别和一个用户 我需要帮助以正确的帖子显示正确的用户 桌子Php Kohana ORM数据透视表错误数据,php,orm,kohana,pivot-table,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 ext
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;
类别和帖子能够正确响应,但用户不能
假设用户的帖子有以下内容:
user_id post_id
1 1
1 2
1 3
2 4
上面的代码将回显用户1、用户2、NULL、NULL,而不是用户1、用户1、用户1、用户2。出于某种原因,它将Post 1与用户1匹配,Post 2与用户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
只有在需要跟踪多对多关系时,才真正需要使用透视表,在这种情况下,没有多对多关系可以只跟踪一对多关系 首先,Post模型应该将字段user\u id和category\u id作为外键来跟踪一对多关系。文档解释了您应该如何构建模型,其中的用户、类别、帖子示例与您试图实现的内容几乎完全相同: