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 回だけ実行される場合、プロシージャは正常に実行されます。
ループでプロシージャを呼び出す方法は?
ありがとうございました