Php Kohana 3.2 ORM检查集合中是否存在记录
我正在尝试打印一个包含记录的总列表,对于此列表,一些可能连接到用户。活动项来自同一类的另一个集合(活动集合)。我将查看整个列表,并需要检查每个记录是否存在于活动集合中。 有这样的功能吗 目前,我将活动项放在一个数组中,使用记录id作为数组键进行检查,这是可行的,但我想知道是否有更好的方法来实现这一点Php Kohana 3.2 ORM检查集合中是否存在记录,php,orm,kohana,Php,Orm,Kohana,我正在尝试打印一个包含记录的总列表,对于此列表,一些可能连接到用户。活动项来自同一类的另一个集合(活动集合)。我将查看整个列表,并需要检查每个记录是否存在于活动集合中。 有这样的功能吗 目前,我将活动项放在一个数组中,使用记录id作为数组键进行检查,这是可行的,但我想知道是否有更好的方法来实现这一点 $totalcollection = ORM::Factory('table')->find_all(); // user has an relation named 'activerecor
$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>";
}
}
$totalcollection=ORM::Factory('table')->find_all();
//用户有一个名为“activerecords”的关系,它将查找连接的记录
//通过链接表发送给用户
$activecollection=$user->activerecords->find_all();
foreach($totalcollection作为$record){
$active=false;
//我正在寻找这样的函数。它存在吗?
$active=$activecollection->contains($record);
如果($active){
echo“”$record->name.“ ”;
}否则{
回声“”$record->name.“ ”;
}
}
有什么想法吗?因为您使用的是一个表,所以只需要检查
$totalcollection
中的元素的type
属性是否等于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>";
}
}
$totalcollection=ORM::Factory('table')->find_all();
foreach($totalcollection作为$record){
如果($record->type=='active'){
echo“”$record->name.“ ”;
}否则{
回声“”$record->name.“ ”;
}
}
将它们视为两个独立的集合毫无意义,而且是不必要的开销。您可以在
Model_表中为此编写一个方法
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>";
}
}
foreach($totalcollection作为$record){
如果($record->属于用户($user)){
echo“”$record->name.“ ”;
}否则{
回声“”$record->name.“ ”;
}
}
如果您认为这会生成太多SQL查询,那么另一种选择是获取activerecord ID并在_array()中使用,
,我认为这就是您目前的做法。我也很好
请考虑把你的布局和逻辑分开,比如说./p>我的道歉,我的示例代码有点差。我修改了它。有一个链接表将用户与一条记录(1-n关系)连接起来。我想找到所有记录,然后检查哪个记录连接到用户。现在更清楚了吗?谢谢你的反馈!我真的希望已经有了这个功能,有了你的答案,查询会增加很多,所以我想我会坚持目前的逻辑。我使用smarty,所以布局和逻辑是分开的。但举个例子,这更容易。无论如何谢谢你!