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”,没有错误,并且没有调用过程(至少没有执行过程),带有“DB::raw”的 var_dump'ed 结果看起来

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

但是在第二个循环调用中我得到

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

试图“$stmt->closeCursor();” 在“$stmt->execute();”之后,但现在成功了。

没有循环或者如果循环只运行一次,程序就会成功执行。

如何在循环中调用过程?

谢谢

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 回答