2015-07-22 8 views

risposta

20

Si può provare questo:

//SELECT * FROM users AS u WHERE u.user_id IN(1,5,8) AND (u.status = 1 OR u.verified = 1) OR (u.social_account = 1 AND u.enable_social = 1) 
$model = arname()->find() 
     ->andWhere(['user_id'=>[1,5,8]]) 
     ->andWhere(['or', 
      ['status'=>1], 
      ['verified'=>1] 
     ]) 
     ->orWhere(['and', 
      ['social_account'=>1], 
      ['enable_social'=>1] 
     ]) 
     ->all(); 
+0

@ rohit-Suthar, grazie. – gouki

4

ho scontato che avete già conosceva configurazione del database in Yii 2.0, che è fondamentalmente lo stesso come in Yii versione 1.0.

Se si desidera utilizzare activeQuery, è necessario definire una classe 'Utenti' prima:

<?php 
    namespace app\models; 
    use yii\db\ActiveRecord; 

    class USERS extends ActiveRecord { 
     public static function tableName() 
     { 
      return 'users'; 
     } 
    } 
?> 

Poi quando lo si utilizza, è possibile scrivere come segue:

<? 
    $usr_data = USERS::find()-> 
      ->where("user_id IN(1,5,8) AND (status = 1 OR verified = 1) OR (social_account = 1 AND enable_social = 1)") 
      ->all();  
?> 

In La mia opinione, la query attiva fornisce un modo per separare sql per sotto-blocchi. Ma non ha alcun senso per applicarlo quando si dispone di un tale complicato 'E OPPURE' WHERE condizione ..

0

where() funzione del ActiveQuery accetta anche stringa come primo parametro che verrà utilizzato in WHERE condizioni della query. Il modo più semplice sarebbe mettere quelle condizioni nella funzione where().

Supponendo che si stia utilizzando il modello ActiveRecord, è possibile eseguire operazioni simili al seguente nel modello.

$this->find() 
     ->where("user_id IN(1,5,8) AND (status = 1 OR verified = 1) OR (social_account = 1 AND enable_social = 1)") 
     ->all(); 

Naturalmente si consiglia di utilizzare le istruzioni preparate invece di hardcoding valori all'interno di query, ma soprattutto il codice è solo per dare un'idea.

Potete trovare maggiori dettagli nella documentazione Here e Here

28

provare questo -

$query = (new \yii\db\Query()) 
      ->select('*') 
      ->from('users u') 
      ->where(['and',['u.user_id'=>[1,5,8]],['or','u.status=1','u.verified=1']]) 
      ->orWhere(['u.social_account'=>1,'u.enable_social'=>1]); 
    $command = $query->createCommand(); 
    print_r ($command->sql);die; 

more info

3

U anche può fare in questo modo:

$data = model::find() 
->andWhere('plz = :plz',[':plz' => 40]) 
->andWhere('plz = :plz',[':plz' => 40000]) 
->all(); 
1

Con MongoDB :

  $query->andWhere(['and', 
       ['$eq', 'status', 1], 
       ['$in', 'activity', [1, 2]], 
      ]); 
      $query->orWhere(['$in', 'yourField', $yourArray]); 

Testato. Simile a DBMS.

Problemi correlati