Как убрать ошибки при использовании своих полей?
Александр, здравствуйте! Столкнулся с проблемой, которая не даёт покоя, касаемо реализации своих полей в Modx, сделано способом описанным тут, в статье всё очень подробно рассказано и понятно, всё работает, но конкретно в моём случае работает если в таблице у поля уже есть готовая строка, но если строки нет, при сохранении ресурса вылазит такая ошибка
Error HY000 executing statement:
INSERT INTO `pes6_site_content_extend` (`resource`, `country`, `date`, `context`) VALUES (1, '', '2000', '', '', '', '', '')
Array
(
[0] => HY000
[1] => 1364
[2] => Field 'size' doesn't have a default value
)
и значения в таблицу не добавляются, эту ошибку получилось убрать, отключив в конфиге "MySql" строгий режим:
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
но это грубо и нагло, не хотелось бы таким образом делать и даже если так сделать, работать будет, но при сохранении значений в таблицу, будет другая ошибка вылазить:PHP warning: Illegal offset type
Изначально перед тем как сделать свои поля у ресурсов, было реализовано способом описанным тут то-есть плагин дублировал тв поля в свою таблицу, проблем не было, хотя по логике плагин что тот, что этот, выполняет практически туже самую функцию.
Подскажите пожалуйста, как можно устранить эти ошибки?
Ответы: 15
далее устанавливаю полю «context» пустую строку и уже получаю такую ошибку:
Error 22007 executing statement:
INSERT INTO `pes6_site_content_extend` (`resource`, `country`, `datesa`, `size`, `context`) VALUES (1, '', '', 'S', '')
Array
(
[0] => 22007
[1] => 1366
[2] => Incorrect integer value: '' for column `aso`.`pes6_site_content_extend`.`datesa` at row 1
)
Александр, я на Яндекс диск выложил файл плагина, схему и на всякий случай дамп таблицы, если возможно, посмотрите пожалуйста.
У меня получилось добиться, чтобы работало без ошибок, но это не решение проблемы, если к примеру выставить у всех полей кроме id и resource в MySQL по умолчанию «NULL» как я раннее писал, получаем ошибку от этой ошибки удалось избавится удалив в плагине «ExtendedResource» эту строку но как я понимаю это неверно, назначать всем полям по умолчанию «NULL» не учитывая их значимость.
Возможно это тоже необходимая информация в данном случае. Параметры сервера:
На данный момент ситуация такая, работает и сохраняет выбранные значения, только если в phpMyAdmin отключаешь строгий режим «sql-mode» но тогда выходит эта ошибка:
о чём это говорит и как от неё можно избавится?
Если не отключать «sql-mode» и у поля «size» и поля «context» в MySQL по умолчанию сделать пустую строку, выходит такая ошибка:
что можно попробовать сделать в данном случае?
при последующем сохранении этого ресурса ошибки нет, с чем связано не могу понять, не подскажите?
Предупреждение «Illegal offset type» возникает когда мы пытаемся получить доступ к элементу массива, используя в качестве ключа индекса массив или объект.
Код этот:
После этого обновить модель компонента.
Сделано таким образом:
Структура таблицы:
Схема:
Плагин:
Подскажите пожалуйста с чем это может быть связано и как можно попробовать решить эту проблему?
Александр, есть сомнения касаемо структуры таблицы, особенно (Атрибуты и Дополнительно) всё ли у меня правильно и правильно ли я понял по поводу удаления индекса id?
Вам нужно просто убрать [] (вы же сохраняете не массив):
Если при создании структуры таблицы, у нас в качестве первичного ключа (pk) используется поле id с автоинкрементом, то в схеме при описании объекта мы должны наследоваться от xPDOSimpleObject. Т.к. в SimpleObject реализован именно этот механизм (т.е. на основании первичного ключа id с автоинкрементом).
В противном случае, т.е. если у нас первичным ключом является что-то другое (например, два ключа), то в схеме мы дожны наследоваться от xPDOObject.
А ошибка в данном случае возникала из-за того, что pk выступало 2 поля сразу, а в схеме был выбран xPDOSimpleObject. Один из вариантов как это можно было сделать — это установить в качестве pk один ключ id с автоинкрементом.
Первая: \core\cache\includes\elements\modplugin\47.include.cache.php (PHP warning: implode(): Invalid arguments passed строка: 657)
Если проследовать по пути и посмотреть в файл кеша, это закешированый плагин «ExtendedResource», ошибка в этой строке: и в кеше почему-то в конце кода плагина, функция «return;» прописывается два раза, с чем это связано?
Вторая: \core\xpdo\om\xpdoobject.class.php extendResource: (Attempt to set NOT NULL field mypole to NULL Строка: 811), если пройти по пути в файл: xpdoobject.class.php там эта строка: Третья: \core\xpdo\om\xpdoobject.class.php строка: 1452 (Error HY000 executing statement:)
В файле: xpdoobject.class.php под номером 1452 эта строка: Пробовал менять структуру таблицы, делал первичным ключем «resource» в место «id» удалял индекс id и наоборот, пробовал по разному, но данные изменение либо не чего не меняли в плане ошибок, либо добавляли новых и уже при сохранении значений в таблицу.
От первой ошибки получилось избавится, добавив в плагин «ExtendedResource» в строку масив: (array), но на сколько это правильно в данном случае, стоит ли так делать или нужно как-то по другому?
Вторую ошибку получается убрать, если в phpmyadmin в структуре таблицы у поля (список одиночный выбор) в данном случае: mypole «По умолчанию» в место «Как определено» выставить «Нет»
На третью ошибку при любых вариантах, повлиять не получается.
Александр, подскажите пожалуйста, как можно попробовать решить проблему с данными ошибками?
которую получилось убрать удалив в схеме компонента «extendresource» в параметрах поля в моём случае поля: «mypole5», параметр получилось так: теперь всё чисто, журнал ошибок касаемо использования своих полей при любых действиях пуст. Огромное Вам спасибо, что помогли разобраться.