Я обновился до laravel 5.5 и Voyager 1.0 и использую mysql на бродячей коробке.
Я хочу добавить запись в таблицу data_rows для отношений между пользователем и магазином. Я могу создать запись, используя графический интерфейс Voyager.
Который создает соответствующую запись в таблице
Когда я копирую все эти значения в мою сеялку
$dataRow = $this->dataRow($storeDataType, 'store_belongsto_user_relationship');
if (!$dataRow->exists) {
$dataRow->fill([
'type' => 'relationship',
'display_name' => 'Manager',
'required' => 0,
'browse' => 1,
'read' => 1,
'edit' => 1,
'add' => 1,
'delete' => 1,
'details' => '{"model":"App\\User","table":"users","type":"belongsTo","column":"manager_id","key":"id","label":"email","pivot_table":"ad_store","pivot":"0"}',
'order' => 20,
])->save();
}
и запустить мои миграции БД с моими пользовательскими сеялками, если я перезагрузить /database/stores/bread/edit
страница Я получаю сообщение об ошибке при доступе к свойству не-объекта, запущенного в этой строке.
<?php if($relationshipDetails->type == 'belongsTo'): ?><?php echo e('flexed'); ?><?php endif; ?>
Это означает, что json, сохраненный в поле данных, недействителен. Я не понимаю, как это может быть, хотя, когда я скопировал это в мою дословную запись сеялки. Есть ли какая-либо другая запись, добавленная в другую таблицу или кэшированная, которую не учитывает мой читатель? Я пролистал записи в БД и не могу найти ничего очевидного.
РЕДАКТИРОВАТЬ
Добавив эту строку со ссылкой на вопрос, я обнаружил, что это имеет отношение к проблеме
@php $relationshipDetails = json_decode($relationship['details']); @endphp
Так что это было немного глупо с моей стороны. Мой сеялка вставлял строку, которую я определил как таковую; "model":"App\\User"
что я считал достаточным для получения \
персонаж в БД. Что это такое. Проблема в последней строке, которую я добавил к вопросу.
json_decode($relationship['details'])
Когда эта функция вызывается, она пытается создать объект json из строки в базе данных. К сожалению, он не создает объект json успешно, потому что отправитель вставил строку "model":"App\User"
в базу данных.
Чтобы это исправить, я изменил объявление строки в сеялке на
"model":"App\\\\User"
который вставлен в мою базу данных как
"model":"App\\User"
и когда это пройдет json_decode
это становится
"model": "App\User"
пусть это будет важным уроком для спасательных персонажей.
Других решений пока нет …