Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Проблема с сохранением атрибутов


Recommended Posts

Добрый вечер, уважаемые форумчане. Возможно кто-то сталкивался с подобной проблемой и поможет в ее решении.

Суть проблемы такова, идентификатор attribute_id может содержать в себе от 8 до 18 символов. При записи и чтении из таблиц attribute_* проблем нет вообще. Но при попытке сохранения карточки товара, характеристики , которые имеют id от 10 символов не пишутся в product_attribute. Характеристики чьи id имеют 8-9 символов пишутся нормально.

Смена значения int или смена int на bigint не помогла. Возможно поскадите в чем может быть проблема?

Надіслати
Поділитися на інших сайтах


Возможно при записи в базу происходит (int)$attribute_id

Нужно смотреть модель attribute

 

Змінено користувачем ArtemFam
Надіслати
Поділитися на інших сайтах

нарастающий счетчик типа int ограничен числом 2147483647

https://dev.mysql.com/doc/refman/8.0/en/integer-types.html

 

21 минуту назад, okey сказал:

Суть проблемы такова, идентификатор attribute_id может содержать в себе от 8 до 18 символов

откуда у вас берутся 18 символов в инкрементном ЧИСЛОВОМ поле :?

Надіслати
Поділитися на інших сайтах

15 минут назад, ArtemFam сказал:

Возможно при записи в базу происходит (int)$attribute_id

да, и что?

Надіслати
Поділитися на інших сайтах

31 минуту назад, AlexDW сказал:

нарастающий счетчик типа int ограничен числом 2147483647

https://dev.mysql.com/doc/refman/8.0/en/integer-types.html

 

откуда у вас берутся 18 символов в инкрементном ЧИСЛОВОМ поле :?

Они подгружаются по API с поставщика и порезать я их не могу. Мне надо именно в том виде что есть. Это у них идентификаторы идут до 18 символов

Надіслати
Поділитися на інших сайтах


Я просто не могу именно въехать почему проблема становиться именно с product_attribute, потому что запись и чтение в таблицы атрибутов происходят нормально.

45 минут назад, ArtemFam сказал:

Возможно при записи в базу происходит (int)$attribute_id

Нужно смотреть модель attribute

 

Так там итак в модели int и значения тоже целые записуются.

Тут стала проблема с записью именно в это поле)

Надіслати
Поділитися на інших сайтах


3 часа назад, okey сказал:

Но при попытке сохранения карточки товара, характеристики , которые имеют id от 10 символов не пишутся в product_attribute. Характеристики чьи id имеют 8-9 символов пишутся нормально.

Смена значения int или смена int на bigint не помогла. Возможно поскадите в чем может быть проблема?

 

тип поля в данной таблице ограничен количеством символов 11 - https://prnt.sc/p36g53

и это максимальное количество.

 

1 час назад, Yesvik сказал:

Это плохая идея писать идентификаторы поставщика в attribute_id

поддерживаю.

 

Если надо какая-то идентификация с поставщиком, то возможно лучше использовать дополнительную таблицу с комбинациями идентификаторов.

Надіслати
Поділитися на інших сайтах

33 минуты назад, vier сказал:

 

тип поля в данной таблице ограничен количеством символов 11 - https://prnt.sc/p36g53

и это максимальное количество.

 

поддерживаю.

 

Если надо какая-то идентификация с поставщиком, то возможно лучше использовать дополнительную таблицу с комбинациями идентификаторов.

Согласен, но почему то не пишет даже 10 символов. Хотя перевод таблиц attribute_* на bigint не вызывает подобной проблемы. Как и писал выше с данных таблиц я записываю и получаю все, о перевод product_attribute не дает такого самого эффекта. И в каком направлении даже копать понять к сожалению не могу(

Надіслати
Поділитися на інших сайтах


Отчасти проблема решается банальным substr и в целом вроде бы все работает. Но  тут суть не этом, суть в том почему всетаки я не могу загрузить значения именно в эту тамблицу в том виде, котором хочу. 

Надіслати
Поділитися на інших сайтах


11 часов назад, okey сказал:

Согласен, но почему то не пишет даже 10 символов. Хотя перевод таблиц attribute_* на bigint не вызывает подобной проблемы. Как и писал выше с данных таблиц я записываю и получаю все, о перевод product_attribute не дает такого самого эффекта. И в каком направлении даже копать понять к сожалению не могу(

 

PHP код выполняется на 32-х битной машине? Про unsigned тоже надо не забывать.

Змінено користувачем ArtemFam
Надіслати
Поділитися на інших сайтах

2 минуты назад, ArtemFam сказал:

 

Код выполняется на 32-х битной машине? Про unsigned тоже надо не забывать.

Да 32, у меня на локалке почему то 64 не запускается бд)

Надіслати
Поділитися на інших сайтах


14 часов назад, okey сказал:

Так там итак в модели int и значения тоже целые записуются.

Тут стала проблема с записью именно в это поле)

 

int в mysql и php запросто могут быть разного размера=)

Надіслати
Поділитися на інших сайтах

5 минут назад, okey сказал:

Да 32, у меня на локалке почему то 64 не запускается бд)

 

Как я понимаю. При записи php код на 32-х битной машине делает (int)$var тобишь обрезает значение до 4-х байт (32 бит), а затем отсылает в базу.

Кароче $var нужно писать в базу как string а не int=)

Змінено користувачем ArtemFam
Надіслати
Поділитися на інших сайтах

37 минут назад, ArtemFam сказал:

 

Как я понимаю. При записи php код на 32-х битной машине делает (int)$var тобишь обрезает значение до 4-х байт (32 бит), а затем отсылает в базу.

Кароче $var нужно писать в базу как string а не int=)

Огромное Вам человеческое спасибо, на 64 битных вообще такой проблемы не возникает.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.