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

単一のテーブルを使用しているので、次のように、typefromの要素のプロパティ$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>";
   }
}

それらを2つの別個のコレクションとして扱うことは意味がなく、不要なオーバーヘッドです。

于 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>";
   }
}

もう1つのオプションは、SQLクエリが多すぎると思われる場合は、activerecord IDを取得して確認するin_array()ことです。これが、現時点での方法だと思います。IMOも大丈夫でしょう。

ところで:たとえばKOstacheを使用して、レイアウトをロジックから分離することを検討してください。

于 2013-02-11T13:54:49.277 に答える