我的数据库中的错误记录正在更新

时间:2018-12-20 10:21:16

标签: php laravel eloquent

im使用laravel雄辩地更新数据库表中的记录。我传入的参数52是我要更新的记录的ID(主键)。

我正在打印查询以检查查找到的记录,并打印ID为13的记录,然后在检查表时,ID 13已更新。

protected $connection = 'sqlsrv';
protected $table = 'todo';

public $timestamps = false;

public static function complete($todoId, $userId)
{
    $now = new DateTime();

    $query = Self::join('todoTypes', 'todo.typeId', 'todoTypes.id')
                 ->where('todoTypes.canComplete', 1)
                 ->whereNull('todo.completedDate')
                 ->find(52);

    $query->where(function ($query) use ($now)
    {
       $query->whereNull('cancelDate')
             ->orWhere('cancelDate', '>', $now);
    });

    if ($query)
    {
        $query->completedDate = $now;
        $query->save();
    }
}

2 个答案:

答案 0 :(得分:2)

这样尝试如何?

使用find之后的查询没有任何意义,因为find返回第一个对象而不是查询生成器实例。

public static function complete($todoId, $userId)
{
    $now = new DateTime();

    $object = Self::join('todoTypes', 'todo.typeId', 'todoTypes.id')
        ->where('todoTypes.canComplete', 1)
        ->whereNull('todo.completedDate')
        ->where(function ($query) use ($now) {
            $query->whereNull('cancelDate')
                ->orWhere('cancelDate', '>', $now);
        })->find(52);

    if ($object) {
        $object->completedDate = $now;
        $object->save();
    }
}

答案 1 :(得分:1)

我已经设法通过在开头添加一个选择来解决此问题

select('todo.id', 'todo.completedDate')

似乎它获得了正确的行,但是将id显示为其他内容。 当我取出join和joins where子句时,它起作用了。我怀疑它使用的是todoTypes表中联合行的ID,因为它是13。