我正在尝试打印包含记录的总列表,对于此列表,某些列表可能已连接到用户。活动项来自同一类的另一个集合(活动集合)。我将对整个列表进行预测,并且需要检查每个记录是否在活动集合中存在。 那是否有功能?
目前我将活动项目放在一个数组中,并将记录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>";
}
}
有什么想法吗?
答案 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。