2

我正在使用 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;
        }
    );
}

更新

回应bansi的评论……这是你的意思吗……

DB::transaction(function() use($myModel){
    $myModel->updateTable1();
    $myModel->updateTable2();
})
4

2 回答 2

4

在 PHP 5.4.0 之前,您不能在匿名函数$this内部使用。有一个简单的解决方法,您可以使用该构造将变量传递到函数范围。此外,您使用的构造不正确,因为未在父范围中定义。useuse$clock_in_webcam_image

$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
});
于 2013-09-04T06:59:20.600 回答
0

尝试这个。请检查您是否有其他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;
}
于 2013-09-04T05:52:44.683 回答