Heim  >  Fragen und Antworten  >  Hauptteil

Führen Sie alle SQL-Abfragen in der yii2-Migration aus

Ich versuche eine Migration durchzuführen, die mehrere Abfragen für verschiedene Tabellen gleichzeitig ausführt

$sql = '';

$sql .= "UPDATE card_series SET Code = 903 WHERE ID = 1600;";

$cardsSeries1600 = CardList::find()
            ->where(['seriesId' => 1600])
            ->orderBy('ID');
        $cardNum = 2;
        foreach ($cardsSeries1600->each() as $card) {
               if ($card->client_id != NULL) {
                    $sql .= "DELETE FROM client_cards WHERE card_id = ".$card->ID.";";
                }
            $number = str_pad($cardNum, 8, "0", STR_PAD_LEFT);
            $cardId = (1903).$number; 
            $sql .= "UPDATE card_list SET ID = '".$cardId."', Code = 903, Number = '".$number."' WHERE ID = ".$card->ID.";";

            $sql .= "UPDATE card_list_log SET card_id = '".$cardId."', Code = 903, Number = '".$number."' WHERE card_id = ".$card->ID.";";

            $cardNum++;
}

\Yii::$app->db->createCommand($sql)->execute();

Aber am Ende habe ich nur eine erste Bitte UPDATE card_series SET Code = 903 WHERE ID = 1600;

Ich habe versucht, die Variable $sql auszudrucken, und alle Anfragen waren vorhanden, aber nur die erste Anfrage wurde ausgeführt

Was kann ich tun, damit alle Anfragen nacheinander ausgeführt werden?

P粉505450505P粉505450505378 Tage vor532

Antworte allen(1)Ich werde antworten

  • P粉605233764

    P粉6052337642023-09-07 09:11:40

    你可以尝试以下方式。

    public function safeUp()
    {
        $query = "你的查询语句";
        $this->execute($query);
    }

    Antwort
    0
  • StornierenAntwort