Kohana 3.2 ORM检查集合中是否存在记录

时间:2013-02-11 11:17:14

标签: php orm kohana

我正在尝试打印包含记录的总列表,对于此列表,某些列表可能已连接到用户。活动项来自同一类的另一个集合(活动集合)。我将对整个列表进行预测,并且需要检查每个记录是否在活动集合中存在。 那是否有功能?

目前我将活动项目放在一个数组中,并将记录ID作为数组键进行检查,这样可行,但我想知道是否有更好的方法可以做到这一点?

$totalcollection = ORM::Factory('table')->find_all();
// user has an relation named 'activerecords', which will find the records connected
// to a user through a link table
$activecollection = $user->activerecords->find_all();


foreach( $totalcollection as $record ) {

   $active = false;

   // I'm looking for a function like this one. Does it exist?
   $active = $activecollection->contains($record);

   if($active) {
       echo "<li class=\"active\">".$record->name."</li>";
   } else {
       echo "<li>".$record->name."</li>";
   }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

由于您使用的是单个表格,因此您只需要检查type中某个元素的$totalcollection属性是否相等active,如下所示:

$totalcollection = ORM::Factory('table')->find_all();

foreach( $totalcollection as $record ) {

   if($record->type == 'active') {
       echo "<li class=\"active\">".$record->name."</li>";
   } else {
       echo "<li>".$record->name."</li>";
   }
}

将它们视为两个单独的集合是没有意义的,并且是不必要的开销。

答案 1 :(得分:0)

您可以在Model_Table

中为此编写方法
public function belongs_to_user(Model_User $user)
{
    return ($user->activerecords->where('id', '=', $this->id)->count_all() > 0);
}

然后在你的循环中

foreach( $totalcollection as $record ) {

   if($record->belongs_to_user($user)) {
       echo "<li class=\"active\">".$record->name."</li>";
   } else {
       echo "<li>".$record->name."</li>";
   }
}

另一种选择,如果你认为这将产生太多的SQL查询,那就是获取activerecord id并检查in_array(),我认为这就是你现在这样做的方式。也很好,IMO。

BTW:请考虑将布局与逻辑分开,例如与KOstache