В вашем текущем методе delete_checked()
вы return
ing FALSE
, как только первое сообщение "найдено", которое не существует, это предотвратит удаление остальных сообщений как return
остановит выполнение цикла. Если вы хотите сделать это таким образом, используйте continue
вместо этого и рассмотрите возможность использования транзакций .
Если вы не особенно заботитесь о создании отдельных ошибок для каждого сообщения, функция вашей модели может быть немного упрощена:
function delete_checked($message_ids)
{
$this->db
->where_in('id', $message_ids)
->where('recipient', $this->users->get_user_id())
->delete('user_msg');
return $this->db->affected_rows() > 0;
}
Это просто попытается удалить записи. Если они не существуют, они будут проигнорированы, и $this->db->affected_rows()
должен вернуть количество удаленных сообщений. Вы можете сравнить его с count($message_ids)
, если хотите убедиться, что все выбранные сообщения были удалены, или использовать этот пример метода, который проверяет, было ли удалено хотя бы одно сообщение. Если сообщение не существует, вам все равно не нужно его удалять.
Все, что упомянул Крис Шмитц также правильно и важно, у вас есть некоторые очень простые ошибки. Возможно, вы захотите привести к массиву вместо , присваивая $checked_messages
пустому массиву, если вы ожидаете, что вы передаете один идентификатор (целое число или строку) этой функции. Как это:
$message_ids = (array) $message_ids;