2017-08-16 18 views
0

私は、データベース内の "NULL"の値を持つすべての行の乱数を作成することになっている、より長いショップ用プラグインの中に関数を作成しました。バウチャーコード "欄に記載されている。今はforループ条件を固定数で置き換えました。なぜなら、forループ条件のために問題が発生していないことを確認したいからです。forループ内のDBALが正しく動作しない

問題は、forループがデータベースに一度だけ影響することです。

たとえば、私はこのテーブル 's_plugin_tnev'を持っています。その表の中に6行あります。これらのうち4つは、バウチャーコード列の中に値として「NULL」を有する。

これまでのところ私のコードを理解しています。同じテーブルを5回ループし、それらの「NULL」値の列の1つを更新するたびに、それらの「NULL」値の列のいずれか1つが乱数で満たされ、もはや選択されないこのforループによってUPDATEされます。

前述したように、これは起こりませんが。 forループは明らかに一回しか動作しません。

は、ここに私のコードスニペットです:

public function generateCode() 
{ 
    //Repeat action 5 times 
    for($i = 0; $i <= 4; $i++) 
    { 
    $rand = 0; 
    //Creates 16 times a number and add it to the var 
    for ($i = 0; $i<15; $i++) 
     { 
      $rand .= mt_rand(0,9); 
     } 
     //On Checkoutcomplete add $rand to database table 
     $addInt = "UPDATE s_plugin_tnev SET vouchercode = $rand 
         WHERE vouchercode IS NULL 
         LIMIT 1"; 
     $connect = Shopware()->Db()->query($addInt); 
    } 
} 

あなたは、これがShopwareで最高のサポートの方法ですので、私は、DBALフレームワークを使用して見ることができるように。

私の考えは間違いが$が変数を接続とは何かを持っているか、そのDBALデータベースで十分に速くを通信していないであるということでしょう。

多分、誰かがDBALの経験があり、私を助けてくれるかもしれません。事前に

おかげで、 マックスK

答えて

0

あなたは$iで2つのforループを持っているが、ので、あなたの最初の反復で、最後に$i値は15で、最初のループは一度だけ実行されます。

代わりにこれを試してみてください。問題ありませんでした

public function generateCode() 
{ 
    //Repeat action 5 times 
    for($i = 0; $i <= 4; $i++) 
    { 
    $rand = 0; 
    //Creates 16 times a number and add it to the var 
    for ($j = 0; $j<15; $j++) // $j NOT $i <--- 
    { 
     $rand .= mt_rand(0,9); 
    } 
    //On Checkoutcomplete add $rand to database table 
    $addInt = "UPDATE s_plugin_tnev SET vouchercode = $rand 
        WHERE vouchercode IS NULL 
        LIMIT 1"; 
    $connect = Shopware()->Db()->query($addInt); 
    } 
} 
+0

悲しいことに。しかし、まだありがとう。同じ可変文字を2回使用することは非常に悪いことです。 – MLK

+0

それでは、まだ動作していませんか?それともソリ​​ューションを見つけましたか? – LP154

+0

まあ...私はsleep()メソッドを使いました。私は本当にこの解決策を嫌い、良いものがあることを願っています。 – MLK