Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Kohana 3.2 ORM检查集合中是否存在记录_Php_Orm_Kohana - Fatal编程技术网

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

Php Kohana 3.2 ORM检查集合中是否存在记录,php,orm,kohana,Php,Orm,Kohana,我正在尝试打印一个包含记录的总列表,对于此列表,一些可能连接到用户。活动项来自同一类的另一个集合(活动集合)。我将查看整个列表,并需要检查每个记录是否存在于活动集合中。 有这样的功能吗 目前,我将活动项放在一个数组中,使用记录id作为数组键进行检查,这是可行的,但我想知道是否有更好的方法来实现这一点 $totalcollection = ORM::Factory('table')->find_all(); // user has an relation named 'activerecor

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

目前,我将活动项放在一个数组中,使用记录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>";
   }
}
$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,所以布局和逻辑是分开的。但举个例子,这更容易。无论如何谢谢你!