@Paromon
Junior software developer

Почему не совпадают одинаковые записи в базе?

Есть код создания сообщения:
foreach($this->errorsArray as $error){
            $market=db\Market::findOne(['id'=>$error['marketId']]);
            $action=db\Action::findOne(['id'=>$error['actionId']]);
            $message .= "---------------  Error: Action: ".$action->name.", "."Market: ".$market->name.", Account: ".$error['login']."  ------------". "\r\n";
            $message .= "Action: ".$action->name. "\r\n";
            $message .= "Market: ".$market->name. "\r\n";
            $message .= "Account: ".$error['login']. "\r\n";
            $message .= "Date: ".$error['date']. "\r\n";
            $message .= "Message: ".$error['message']. "\r\n";
            $message .= "-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------". "\r\n";
            $message .= "\r\n";
        }

Есть код записи в базу и отправки сообщения:
$find= db\ErrorMessage::findOne(['date'=>$date->format('Y-m-d'),'message'=>$message]);
        if ($find==null){
            $errorMessage = new db\ErrorMessage();
            $errorMessage->date=$date->format('Y-m-d');
            $errorMessage->message=$message;
            $errorMessage->save();
            mail($to, $subject, $message, $headers);
        }

Проблема заключается в том что код запускается каждый час и логика у него такая, что он смотрит в базу и проверяет сегодня было такое сообщение или нет. Если нет то записать новое сообщение и отправить на mail. Не могу разобраться по какой причине не срабатывает условие ['date'=>$date->format('Y-m-d'),'message'=>$message], т.е. в бд забиваются каждый раз одинаковые записи. Понимаю что скорее всего проблема мелкая но я уже над нет 2 дня парюсь. По переменял все подряд но ничего не помогает. Кто подскажет примерный путь решения или само решение?
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
bigton
@bigton
Web-программист
Думаю проблема в строке
$find= db\ErrorMessage::findOne(['date'=>$date->format('Y-m-d'),'message'=>$message]);

которая у вас ничего не находит. Попробуйте для начала помимо сообщения, сохранять в БД md5-хеш сообщения и искать не по тексту, а по хешу.

$errorMessage->message_hash=md5($message);
---
$find= db\ErrorMessage::findOne(['date'=>$date->format('Y-m-d'),'message_hash'=>md5($message]));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы