0

Laravel 3 から Laravel 4 に移行しようとしています

Laravel 3では、このようにプロシージャを呼び出していましたが、すべてうまくいきました。

public function get_gen_dist($skip = 0, $take = 0) {
    $countries = Country::skip($skip)->take($take)->get();
    foreach ($countries as $country) {
        DB::query('CALL dist_proc(' . $country->id . ');');
    }
}

Laravel 4では、「DB::query」を「DB::raw」に変更しました。エラーはなく、プロシージャは呼び出されません(少なくともプロシージャは実行されません)。var_dump'edの結果は「DB::raw」で表示されます

object(Illuminate\Database\Query\Expression)[269]
protected 'value' => string 'CALL dist_proc(107)' (length=19)

また試しました:

...    
foreach ($countries as $country) {
      $country_id = $country->id;
      $db = DB::connection()->getPdo();
      $stmt = $db->prepare("CALL dist_proc(?);");
      $stmt->bindValue(1, $country_id, PDO::PARAM_INT);
      $stmt->execute();
}

しかし、2回目のループコールで取得します

ErrorException
Packets out of order. Expected 1 received 5. Packet size=10

「$stmt->closeCursor();」を試みました 「$stmt->execute();」の後ですが、今は成功しています。

ループがない場合、またはループが 1 回だけ実行される場合、プロシージャは正常に実行されます。

ループでプロシージャを呼び出す方法は?

ありがとうございました

4

1 に答える 1

1

この方法で実行してみてください:

public function get_gen_dist($skip = 0, $take = 0) {
    $countries = Country::skip($skip)->take($take)->get();
    foreach ($countries as $country) {
        DB::statement(DB::raw('CALL dist_proc(' . $country->id . ');'));
    }
}
于 2013-06-07T11:11:46.297 に答える