2014-09-30 26 views
0
$models = ClientsDatabases::model->findAllByAttributes(array(
    'active' => 1, 
    'suspended' => 0 
)); 

我想通過多列的特定值來過濾此。例如:Yii - 過濾模型findAll由多個列值?

$filters = array( 
     array('master_db' => 2, 'db_id' => 3), 
     array('master_db' => 2, 'db_id' => 2), 
    ) 

我可以使用哪些方法來過濾那些特定的列值?

回答

3

您是否考慮過使用示波器來完成此操作?

控制器: $model = ClientsDatabases::model()->active()->suspended()->findAll();

型號:

public function scopes() { 
    return array(
     'active' => array(
      'condition' => 'active = 1' 
     ), 
     'suspended' => array(
      'condition' => 'suspended = 0' 
     ), 
    ); 
} 

如果你想傳遞的價值觀,而不是定義這樣一個默認的範圍,嘗試使用這樣的:

型號:

public function active($active = 0) { 
    $this->getDbCriteria()->mergeWith(array(
     'condition' => "active = {$active}" 
    )); 
    return $this; 
} 

然後你的控制器wou ld看起來像這樣:$model = ClientDatabases::model()->active(1)->suspended()->findAll();

希望有幫助。

+0

你能提供一個使用'master_db'和'db_id'的例子嗎?因爲它們需要非常具體的值,而且它是多重的,而不是簡單的「主動」條件。 – 2014-10-01 13:44:48

+0

你可以提供一些關於'master_db'和'db_id'的內容嗎?它們是兩個有關係的獨立表,還是你用它們來引用特定的表? – visevo 2014-10-01 21:22:13

+0

我正在使用它們來引用外部數據庫 - 我有一個單獨的類,它連接到主數據庫,其中包含這些站點的站點和數據庫連接,以及使用子數據庫的位置。我只需要一些等同於'SELECT * FROM clients_databases WHERE active 1 AND((master_db = 1 AND db_id = 3)OR(master_db = 2 AND db_id = 1)''''的東西。也許最好的方法只是一個原始查詢? – 2014-10-02 15:09:07