Обновление, где не существует, кроме обновления строки, используя базу данных Illuminate
Я хотел бы обновить запись и проверить, не существует ли она в таблице, но проблема в том, что, если я проверяю, существует, это сработало, но я даже не могу обновить одну выбранную запись, потому что она уже существует.
Вот мой код
$app->post('/update_function', function($request, $response, $args) {
$exists = $this->db->table('functions')->where('project_id', '=', $request->getParam('project_id'))
->where('function_number', '=', $request->getParam('function_number'))
->exists();
if(!$exists) {
$query = $this->db->table('functions')
->where('function_id', '=', $request->getParam('function_id'))
->update([
'project_id' => $request->getParam('project_id'),
'function_number' => $request->getParam('function_number'),
'function_text' => $request->getParam('function_text')
]);
if($query) {
echo "Function was updated";
}
}else {
echo "Can not update duplicate function number";
}
});
1 ответ
Простое решение
Не использовать существует, используйте сначала ()
$record = $this->db->table('functions')
->where('project_id', '=', $request->getParam('project_id'))
->where('function_number', '=', $request->getParam('function_number'))
->first();
if (is_null($record)) { //record does not exist }
else {
$record->update([
'project_id' => $request->getParam('project_id'),
'function_number' => $request->getParam('function_number'),
'function_text' => $request->getParam('function_text')
]);
$record->save();
}
Это предполагает, что вы извлекаете только одну запись... если нет, то просто используйте для каждой итерации по всем записям, заменив сначала на get.