我在Kohana 3.3中有一个简单的crud应用程序,有几种不同类型的数据或模型。让我们说这些模型是:
我为每个模型都有一个表格,但这些表格之间没有任何关系。我一直试图定义与ORM的关系,但我仍然感到困惑。举个例子:
我有很多地方。每个位置都有很多用户。
我知道我可以用:
来定义class Model_Location extends ORM {
/**
* A location has many users
*
* @var array Relationships
*/
protected $_has_many = array(
'users' => array('model' => 'user'),
);
}
据我了解,我可以通过引用用户表中行的父位置ID来连接这两者。但是,如果每个用户都属于许多位置怎么办?我应该将序列化数据存储在外键中吗?我应该创建一个“查找表”吗?如果是这样,它应该怎么样?
我怎样才能查询数据库中的某个位置以及附加到该位置的所有用户? ORM甚至是用于此类事情的正确技术吗?
答案 0 :(得分:2)
您正在寻找through
参数,请查看docs。
您需要一个额外的表来存储两个模型的ID
表users_locations
,字段:user_id
和location_id
(当然都已编入索引)
在你的模特中:
protected $_has_many = array(
'users' => array(
'model' => 'user'
'through' => 'users_locations',
),
);
在用户模型中反之亦然:
protected $_has_many = array(
'locations' => array(
'model' => 'location'
'through' => 'users_locations',
),
);