Laravel/PHP/MySQL — почему один столбец хранится с нулевым значением, несмотря на то, что ему было предоставлено значение через модель Eloquent?

странный здесь. У меня есть таблица с несколькими столбцами (необычно, да?), и я создаю строку с помощью модели Eloquent в Laravel (v9). Вот фрагмент кода

        while ($i <= $numrecs - 1) {

            // if the qty is non-zero then we want to store it

            if ($qtys[$i] != "") {
                
                $itemrec = MyItem::create([
                    'user_id' => Auth::id(),
                    'item_type_id' => $ids[$i],
                    'my_property_room_id' => 5,
                    'my_property_id' => session('g_my_property_id'),
                    'name' => $names[$i],
                    'qty' => $qtys[$i],
                    'comments' => $comments[$i],
                    'client_id' => 0,
                    'version' => 1,
                    'date_effective_from' => now(),
                    'status' => 'ACTIVE'
        
                ]);

Видите этот столбец my_property_room_id? Ну, по какой-то причине это всегда сохраняется с нулевым значением в MySQL, независимо от того, какое значение я передаю (будь то в переменной или, как в этой последней попытке убедиться, что значение действительно передается - в данном случае 5).

Я могу отправить запрос в MySQL, такой как этот

update my_items set my_property_room_id = 5 where user_id=6;

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

Все остальные параметры столбца, отправляемые в модель Eloquent, сохраняются, как и ожидалось.

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

У кого какие мысли, в чем может быть причина?

Заранее спасибо, Джереми

Покажите структуру таблицы.

Grumpy 17.05.2022 19:05

Покажите свою миграцию и/или результат show create table my_items из MySQL. Есть ли у вас мутаторы на модели?

miken32 17.05.2022 19:05

Можешь показать свой полный MyItem класс?

aynber 17.05.2022 19:07
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
3
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы также должны добавить это свойство в массив $fillable класса Model.

// app/Models/MyItem.php

protected $fillable = ['my_property_room_id'];

В качестве альтернативы вы можете просто сделать:

// app/Models/MyItem.php

protected $guarded = [];

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

Спасибо всем, кто ответил - это была классическая ошибка разработчика... первоначально столбец назывался "property_room_id" - и модель была сгенерирована из этого определения (фактически реконструирована из определения таблицы). Затем я каким-то образом добавил столбец «my_property_room_id» (должен был заменить «property_room_id») и не регенерировал модель. Итак, хорошие новости, я не нашел ошибок в Eloquent :) - и, чтобы быть ясным, когда я добавил защищенный $fillable = ['my_property_room_id'], он работал как сон...

jeremy 17.05.2022 20:08

Другие вопросы по теме