recherche

Maison  >  Questions et réponses  >  le corps du texte

Exécuter toutes les requêtes SQL dans la migration yii2

J'essaie de faire une migration qui exécute plusieurs requêtes sur différentes tables en même temps

$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();

Mais au final, je n'ai qu'une première demande UPDATE card_series SET Code = 903 WHERE ID = 1600;

J'ai essayé d'imprimer la variable $sql et toutes les requêtes étaient là mais seule la première requête a été exécutée

Que puis-je faire pour que toutes les requêtes s'exécutent les unes après les autres ?

P粉505450505P粉505450505449 Il y a quelques jours571

répondre à tous(1)je répondrai

  • P粉605233764

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

    Vous pouvez essayer les méthodes suivantes.

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

    répondre
    0
  • Annulerrépondre