Я ищу запись, которая соответствует условию `['amoID' => $contacts[0]->getId(), 'crmCompanyID' => $companyID]`. В случае, если такой записи не существует, необходимо создать новую. Однако возникает ошибка, указывающая на то, что `crmCompanyID` не может иметь значение ноль. Вот структура моей базы данных: <pre><code>CREATE TABLE IF NOT EXISTS `crmAmoUser` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `amoID` bigint(20) UNSIGNED NOT NULL COMMENT 'Ид в амо', `name` varchar(190) NOT NULL COMMENT 'Имя', `crmCompanyID` int(11) NOT NULL, `created` timestamp NULL DEFAULT NULL, `updated` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `AMOID` (`amoID`,`crmCompanyID`) USING BTREE, KEY `CRMAmoUserCompany` (`crmCompanyID`) USING BTREE, KEY `CRMNameCompany` (`name`,`crmCompanyID`) ) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8</code></pre> Также вот определение модели: <pre><code>class AmoUser extends BaseCRM { protected $table = 'crmAmoUser'; protected $casts = [ 'created' => 'datetime', 'updated' => 'datetime', 'name' => 'string', 'amoID' => 'int', 'crmCompanyID' => 'int', ]; protected $fillable = [ 'name', 'amoID', 'crmCompanyID' ]; public function Company(){ return $this->belongsTo(Company::class, 'crmCompanyID'); } }</code></pre> И вот часть кода, где инициализируется интеграция: <pre><code>$amoCRMIntegration = new AmoCRMIntegration($company->id); $amoCRMIntegration->getLeadsWithContacts($all);</code></pre> Прошу помочь разобраться с проблемой, возникающей при создании записи с `crmCompanyID`, который оказывается равным нулю.
Ошибка "Нарушение целостности данных: Столбец 'crmCompanyID' не может быть пустым" указывает на то, что вы пытаетесь создать запись в таблице `crmAmoUser`, где значение `crmCompanyID` равно нулю или не задано, что противоречит объявленной ограниченности (NOT NULL) для этого столбца в структуре базы данных. Вот несколько шагов, которые могут помочь вам устранить эту проблему: 1. **Проверка существования значения `crmCompanyID`:** Убедитесь, что перед созданием новой записи переменная `$companyID` (или аналогичная, которая используется для назначения `crmCompanyID`) содержит корректное значение, отличное от нуля. Например: ```php if (!$companyID) { // Обработка случая, когда crmCompanyID отсутствует throw new Exception("crmCompanyID не может быть пустым"); } ``` 2. **Проверка существующей записи:** Если вы ищете существующую запись для обновления или создания, убедитесь, что запрос для нахождения записи корректный и фактически возвращает запись, если она существует: ```php $user = AmoUser::where([ 'amoID' => $contacts[0]->getId(), 'crmCompanyID' => $companyID ])->first(); ``` Если запись не найдена, создайте её только если `crmCompanyID` имеет допустимое значение. Например: ```php if (!$user) { // Создаем новую запись только если $companyID не ноль if ($companyID) { $user = AmoUser::create([ 'name' => 'Имя пользователя', // Замените на свое значение 'amoID' => $contacts[0]->getId(), 'crmCompanyID' => $companyID, ]); } else { throw new Exception("Невозможно создать новую запись: crmCompanyID не может быть пустым."); } } ``` 3. **Проверка на уровне базы данных:** Если обновление записи необходимо, проверьте схему базы данных, чтобы убедиться, что все ограничения установлены правильно. Все связи и ограничения должны поддерживать вашу бизнес-логику. 4. **Логирование и тестирование:** Добавьте логирование перед выполнением операций создания и обновления, чтобы удостовериться в том, какие значения поступают в ваш код. Это поможет найти источники проблемы. Например: ```php Log::info('Создание пользователя', [ 'amoID' => $contacts[0]->getId(), 'crmCompanyID' => $companyID, ]); ``` 5. **Разработка тестов:** Если у вас есть возможность, создайте тесты для проверки сценариев, которые вы используете. Это поможет выявить потенциальные проблемы до их возникновения. Следуя данным рекомендациям, вы сможете устранить проблему с попытками создания записи с `crmCompanyID`, равным нулю.
Посмотри стек вызовов в логах. После вызова каких функций происходит твоя ошибка. Ошибка не здесь «$ amoContact Entity->crmCompanyID=(int)$companyID;», т.к. тут работа происходит с AmoContact , а в сообщение об ошибке фигурирует crmAmoUser .