Неправильная запись в моей базе данных обновляется

Я использую Laravel Eloquent для обновления записи в таблице базы данных. Я передаю параметр 52, который является идентификатором записи, которую я хочу обновить (первичный ключ).

Я печатаю запрос, чтобы проверить, какая запись его нахождения и печатает ли запись с идентификатором 13, а затем, когда я проверяю таблицу, идентификатор 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();
}
}

1

Решение

Как насчет того, чтобы пытаться так?

Запрос после использования 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();
}
}
2

Другие решения

Мне удалось это исправить, просто добавив выбор в начале

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

Кажется, он получал правильный ряд, но отображал идентификатор как что-то еще.
Когда я вынул соединение и пункт где присоединяются, это сработало. Я подозреваю, что он использовал идентификатор объединенной строки из таблицы todoTypes, поскольку это было 13.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector