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