简短的回答:不。你在这里拥有的是一个典型的n:m
关系,可以很容易地在 Kohana 中使用has_many “通过”(在默认角色用户关系中使用)。但这不允许“中间”表中的额外属性,因此您需要使用 2 has_many和相应的belongs_to。
这可以用简单的英语来描述,如下所示:
- 一
user
有多starredjobs
。
- 一
job
有多starredjobs
。
- 一个
starredjob
属于一个user
和一个job
far_key
还要考虑和之间的区别foreign_key
(遗憾的是官方文档没有涵盖它),但要记住一个简单的规则:另一个表中的键很远 -> 它是far_key
.
这会给你以下
用户.php
$_has_many = array(
'starredjobs' => array(
'model' => 'Starredjob',
'far_key' => 'user_id'
)
);
用户作业.php
$_has_many = array(
'starredbyuser' => array(
'model' => 'Starredjob',
'far_key' => 'userjob_id'
)
);
已加星标的job.php
$_belongs_to = array(
'user' => array(
'model' => 'User',
'foreign_key' => 'user_id'
),
'job' => array(
'model' => 'Userjob',
'foreign_key' => 'userjob_id'
)
);
现在您可以执行各种操作,例如:
//get all jobs starred by given $user
foreach ($user->starredjobs->find_all() as $starredjob) {
//info on userjob via $starredjob->job->jobinfo, etc.
//info from pivot table via $starredjob->comments, etc.
}
//get all users that starred a given $userjob
foreach ($userjob->starredbyuser->find_all() as $starredjob) {
//info on user via $starredjob->user->FirstName, etc.
//info from pivot table via $starredjob->comments, etc.
}