1

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

目前,我将活动项目放在一个数组中,其中记录 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>";
   }
}

有任何想法吗?

4

2 回答 2

0

由于您使用的是单个表,您只需要检查type元素的属性是否$totalcollection为 equal 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>";
   }
}

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

于 2013-02-11T12:00:41.280 回答
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 ids 并检查in_array(),我认为这就是你目前正在做的方式。也可以,IMO。

顺便说一句:请考虑将您的布局与您的逻辑分开,例如使用KOstache

于 2013-02-11T13:54:49.277 回答