我正在使用Laravel 4和PHP构建一个新的应用程序。它在我运行PHP 5.4.x的开发服务器上运行良好,但我的老板坚持认为它必须运行5.3.2版
我花了一整天的时间来修复5.3.2中的所有内容,并且几乎拥有了所有内容,所以我想,直到我遇到下面代码的问题。
我的问题从这一行开始DB::transaction(function($clock_in_webcam_image) use ($clock_in_webcam_image)
我相信这种类型的代码可能不适用于这个版本的PHP?如果是这样的话,我有什么选择来运行相同的代码或让它执行相同的操作?
如果有任何帮助,我将不胜感激。非常不幸的是,我的老板直接告诉我,不,他不会允许我们更新到新的PHP,所以我现在陷入了困境
// Create a new time card record when a User Clocks In
public function createTimeCard($clock_in_webcam_image) {
// Create both Timecard and timecard record tables in a Transaction
DB::transaction(
function ($clock_in_webcam_image) use ($clock_in_webcam_image) {
$timeCard = DB::table('timeclock_timecard')->insertGetId(
array(
'user_id' => $this->user->user_id,
'clock_in_datetime' => $this->dateTime->format($this->dateFormat),
'clock_in_timestamp' => $this->dateTime->getTimestamp(),
'clock_in_webcam_image' => $clock_in_webcam_image
)
);
$timeCardPunchEntry = DB::table('timeclock_punch_entry')
->insertGetId(
array(
'timecard_id' => $timeCard,
'user_id' => $this->user->user_id,
'created_at_datetime' => $this->dateTime->format($this->dateFormat),
'created_at_timestamp' => $this->dateTime->getTimestamp(),
'clock_type' => 'clock_in',
'webcam_image' => $clock_in_webcam_image
)
);
return $timeCard;
}
);
}
更新
针对班思的评论。。。这就是你的意思吗…
DB::transaction(function() use($myModel){
$myModel->updateTable1();
$myModel->updateTable2();
})
在PHP 5.4.0之前,您不能在匿名函数中使用$this
。不过,有一个简单的解决方法,可以使用use
构造将变量传递到函数范围中。此外,由于$clock_in_webcam_image
未在父作用域中定义,因此使用use
构造的方式不正确。
$user = $this->user;
$dateTime = $this->dateTime;
DB::transaction(function($clock_in_webcam_image) use ($user, $dateTime) {
// snip
array(
'user_id' => $user->user_id,
'clock_in_datetime' => $dateTime->format($this->dateFormat),
'clock_in_timestamp' => $dateTime->getTimestamp(),
'clock_in_webcam_image' => $clock_in_webcam_image
)
// snip
});
试试这个。请检查您是否未定义其他insertTimecard
。
// Create a new time card record when a User Clocks In
public function createTimeCard($clock_in_webcam_image)
{
// Create both Timecard and timecard record tables in a Transaction
DB::transaction($this->insertTimecard($clock_in_webcam_image));
}
private function insertTimecard($clock_in_webcam_image)
{
$timeCard = DB::table('timeclock_timecard')->insertGetId(
array(
'user_id' => $this->user->user_id,
'clock_in_datetime' => $this->dateTime->format($this->dateFormat),
'clock_in_timestamp' => $this->dateTime->getTimestamp(),
'clock_in_webcam_image' => $clock_in_webcam_image
)
);
$timeCardPunchEntry = DB::table('timeclock_punch_entry')->insertGetId(
array(
'timecard_id' => $timeCard,
'user_id' => $this->user->user_id,
'created_at_datetime' => $this->dateTime->format($this->dateFormat),
'created_at_timestamp' => $this->dateTime->getTimestamp(),
'clock_type' => 'clock_in',
'webcam_image' => $clock_in_webcam_image
)
);
return $timeCard;
}