Александр, здравствуйте! Столкнулся с проблемой, которая не даёт покоя, касаемо реализации своих полей в 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
Изначально перед тем как сделать свои поля у ресурсов, было реализовано способом описанным
тут то-есть плагин дублировал тв поля в свою таблицу, проблем не было, хотя по логике плагин что тот, что этот, выполняет практически туже самую функцию.
Подскажите пожалуйста, как можно устранить эти ошибки?
далее устанавливаю полю «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», параметр получилось так: теперь всё чисто, журнал ошибок касаемо использования своих полей при любых действиях пуст. Огромное Вам спасибо, что помогли разобраться.