2011-12-16 13 views
2

私は、このYiiの検索が

$reviewModel=Review::model()->findAll(); 

は、今私は$ reviewModel上の検索操作を実行したいきた私は、ID 1のユーザーレビューを投稿たりしていない場合は、検索したいと言います。 yiiによって提供される関数もあります。

注:私はいけない) $ reviewModel =レビュー::モデルを(使用したい - > findAllの(配列( '条件' => ''));私は としてすべてのレビュー&が必要なので、検索を実行します。

+1

$ reviewModelはモデルの配列です。または、配列の配列Yiiで同じものは何ですか?希望するアルゴリズムを使用して、多次元配列内に必要な値を見つけます。そのように簡単です。 – Johnatan

答えて

0

これは私が推奨していることであり、良い設計手法であり、データベースからの最適なパフォーマンスを可能にし、クエリの量を削減します。あなたのレビューがユーザーとの関係を持つようにします。ユーザーは多くのレビューを投稿します。ユーザーHAS_MANYのレビュー。レビューとHAS_ONEユーザー。それを使用して、関係を構築するための外部キーを作成します。

だからあなたのユーザモデル(関係)の内側にidがこのようなものがあります:あなたのレビューのモデルIDの内側になりまし

'reviews' => array(self::HAS_MANY, 'Review', 'originator), 

をこのようなものがあります:あなたはすべてのあなたのことを行っているたら

'user' => array(self::BELONGS_TO, 'User', 'originator'), 

をすべてのユーザーのレビューをループする必要があります。 nullの場合、レビューはありません。

$user = User::model()->findbyPk(1); 

とuser-> reviewsには、そのユーザーのすべてのレビューが含まれます。

+0

私の質問はあなたの答えとはまったく異なります。私はすべてのレビューをしたいし、その上で検索操作を実行する – iThink

0

(あなたの質問が正しく理解されている場合)私には分かりません。 Yiiは、あなたがDBから望むものを求めていますが、メモリ内のアクティブなレコードモデルの配列からは求めないさまざまな方法を提供しています。

このようにしたい場合は、すでに行ったようにデータの配列を取得し、PHPを使用して、必要なものを探しているモデルの配列を反復処理します。

0

手動でフィルタリングすることができます。たとえば、

$reviewModel=Review::model()->findAll(); 

$matched = false; 
foreach($reviewModel as $r) //cycle through each review 
{ 
    if($r->user == 1)   //check if user is desired 
    { 
     $matched = true; //set matched as true 
     break;  //stop searching, as we already found one 
    } 
} 

複数のものを検索する場合は、一致する配列を使用してその配列をチェックできます。

$reviewModel=Review::model()->findAll(); 

$wanted = array(0=>false,3=>false,6=>false,8=>false); 

foreach($reviewModel as $r) //cycle through each review 
{ 
    if(isset($wanted[$r->user]) and !$wanted[$r->user]) //check if user is in wanted list and still false 
    { 
     $wanted[$r->user] == true; //set appropiate user to true 
    } 
} 
関連する問題