Проблема Laravel с отношением, ведущим к нулю

Я столкнулся с проблемами с отношениями Laravel, когда несколько идентификаторов моделей идентичны, но у другого есть начальный ноль, а у другого нет.

Product ID | Productname  
-----------|------------ 
012345     | Product A
12345      | Product B

Если эти отношения загружены в одном и том же запросе, будет возвращено только первое, а другое нет.

Столбцы базы данных являются строками, и в модели продукта я установил приращение к false и приведение атрибута id к строке. Разве нетерпеливая загрузка Laravel не учитывает начальные нули?

Я не могу изменить эти идентификаторы продуктов с ведущими нулями.

Заранее спасибо!


person lingo    schedule 31.05.2019    source источник
comment
Пожалуйста, поделитесь кодом для определения отношений.   -  person Vikash Pathak    schedule 31.05.2019
comment
Не могли бы вы показать нам свои классы моделей, пожалуйста.   -  person liqSTAR    schedule 31.05.2019
comment
Красноречивая модель имеет свойство устанавливать тип первичного ключа. Измените его с целого числа на строку. Также у него есть ключ, чтобы определить, является ли первичный ключ автоинкрементным или нет. Установите его на ложь. Не уверен, как называется это свойство, но я уверен, что вы можете его найти! :-)   -  person Elias Soares    schedule 31.05.2019
comment
Как я уже упоминал в своем ответе, но последовало понижение, вам нужно определить public $incrementing = false;и внутри миграции установить тип атрибута на string.   -  person liqSTAR    schedule 31.05.2019
comment
Я установил приращение на false   -  person lingo    schedule 31.05.2019


Ответы (1)


Я просто запускаю тест на локальной установке laravel и не могу воспроизвести проблему.

Вы уверены, что проблема не в том, как вы структурируете запрос? Потому что, если в какой-то момент вашей программы переменная $id будет обрабатываться как целое число, будущее преобразование в строку удалит начальный нуль.

Например, возможно, вы получаете идентификатор из запроса:

$productId = $request->get('product_id');

На данный момент $productId считается целым числом, поэтому, если вы используете productId для запроса вашей БД, начальный нуль будет удален.

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

Вы можете протестировать правильный запрос с помощью tinker и получить свои продукты вручную:

Product::find('012345');
Product::find('12345');
person gbalduzzi    schedule 31.05.2019
comment
Я запрашиваю другую модель, которая имеет отношение продукта. Я думаю, что эта проблема связана с нетерпеливой загрузкой, поэтому фреймворк считает, что продукт уже загружен, даже если в другом есть начальный ноль. Они работают правильно с отдельными запросами. - person lingo; 31.05.2019