2017-05-26 3 views
0

Dies ist der Update-CodeYii2 aktualisieren, wenn die Bedingung ein Array ist

$clients = OpClient::find(['id'])->where(['status'=>'Active'])->all(); 

    foreach($clients as $client) 
    { 
     $array[] = $client['unit_id']; 
     $unit = OpUnit::find()->where(['id'=>$array]); 

     file_put_contents('test.txt',print_r($client['unit_id'],true)); 

     $connection = Yii::$app->db; 
     $connection->createCommand()->update('op_unit', ['selected' => 'Yes'], 'id='.$array.'')->execute(); 
    } 

Wie soll ich in der Update-Abfrage eingeben, wo die ID ein Array? Es zeigt Fehler Array to string conversion. Jeder Rat wird geschätzt. Dank

Antwort

2

sollte so sein ..

$connection->createCommand()->update('user', 
      ['selected' => 'Yes'],['id' => $array])->execute(); 

versuchen, den echten SQL-Code mit

$myRawSql= $connection->createCommand()->update('user', 
      ['selected' => 'Yes'],['id' => $array])>getRawSql(); 

var_dump($myRawSql); 
+0

ich das auch versucht. Es zeigt keinen Fehler, aber die Datenbank wurde nicht aktualisiert:/ – ron

+0

Überprüfen Sie generierte SQL-Abfrage von 'var_dump ($ verbindung-> createCommand() -> update ('Benutzer', ['ausgewählt' => 'Ja'], [' id '=> $ array]) -> createCommand() -> rawSql); die; ' – Yupik

+0

versuchen Sie die echte rawSql erstellt .. Antwort aktualisiert mit Vorschlag – scaisEdge

1

Für Suchen Sie die IN Bedingung verwenden können. d.h

->andWhere(['in', 'id', [1, 2, 3]]) 

// Abfrage wird: wobei ID IN (1, 2, 3)

http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html

in: Operand 1 sollte eine Spalte oder DB Ausdruck sein. Operand 2 kann entweder ein Array oder ein Query-Objekt sein. Es wird eine IN-Bedingung erzeugen. Wenn Operand 2 ein Array ist, wird es den Bereich der Werte darstellen, die der Spalten- oder DB-Ausdruck sein sollte; Wenn Operand 2 ein Query Objekt ist, wird eine Unterabfrage generiert und als der Bereich der Spalte oder DB-Ausdruck verwendet. Zum Beispiel wird ['in', 'id', [1, 2, 3]] id IN (1, 2, 3) erzeugen. Die Methode wird die Spalte Name und Escape-Werte in dem Bereich ordnungsgemäß angeben. Der In-Operator unterstützt auch Composite-Säulen. In diesem Fall sollte Operand 1 ein Array der Spalten sein, während Operand 2 ein Array von Arrays oder ein Query Objekt sein sollte, das den Bereich der Spalten darstellt.

Also im Grunde müssen Sie Ihr Array an IN für die Suche übergeben.

Für Update können Sie gleiche verwenden Wo Syntax in updateAll Befehl dh

// UPDATE customer SET status = 1 WHERE id IN (1, 2, 3) http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#updating-multiple-rows

Customer::updateAll(['status' => Customer::STATUS_ACTIVE], ['in', 'id', [1, 2, 3]]); 

Hoffe, das hilft. Vielen Dank.

+0

U nicht 'in' zu verwenden. Die Verwendung von '['id' => $ array]' (wobei '$ array' wirklich Array ist) erzeugt 'in'-Bedingung, verursacht Abfrage-Builder-Prüfungen, wenn value array ist. – Yupik

+0

Ich werde es untersuchen. Danke für den Hinweis – ron

Verwandte Themen