Невозможно воссоздать DataRow для отношения в Laravel Voyager

Я обновился до 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();
}

и запустите мои миграции db с моими пользовательскими сеялками. Если я перезагружу страницу /database/stores/bread/edit, я получаю сообщение об ошибке для доступа к свойству не-объекта, запущенного в этой строке.

<?php if($relationshipDetails->type == 'belongsTo'): ?><?php echo e('flexed'); ?><?php endif; ?>

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

ИЗМЕНИТЬ

Добавление этой строки со ссылкой на вопрос, поскольку я обнаружил, что это имеет отношение к проблеме

@php $relationshipDetails = json_decode($relationship['details']); @endphp

person WhyAyala    schedule 13.10.2017    source источник


Ответы (2)


Так что с моей стороны это был своего рода идиотизм. Моя сеялка вставляла строку, которую я определил как таковую; "model":"App\\User", что, по моему мнению, было достаточно для ввода символа \ в базу данных. Что это такое. Проблема в последней строке, которую я добавил к вопросу.

json_decode($relationship['details'])

Когда эта функция вызывается, она пытается создать объект json из строки в базе данных. К сожалению, он не создает объект json успешно, потому что сидер вставил строку "model":"App\User" в базу данных.

Чтобы исправить это, я изменил объявление строки в сеялке на

"model":"App\\\\User"

который вставлен в мою базу данных как

"model":"App\\User"

и когда он будет пройден json_decode, он станет

"model": "App\User"

пусть это будет важным уроком по escape-символам.

person WhyAyala    schedule 20.10.2017

Я знаю, что это было много лет назад, но я отвечу на этот вопрос для тех, кто новичок в Voyager и у кого есть этот вопрос.

простой ответ: подробно воспользуйтесь массивом php.
например:

$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();
}

person Seyed Mohammadreza    schedule 15.10.2020
comment
Я не прикасался к ларавелам и путешественникам несколько лет. Я не знаю, сработает ли это, но я хотел бы попробовать и протестировать это в свободное время. Какая версия Voyager работала для вас? - person WhyAyala; 15.10.2020
comment
@WhyAyala работает на ^ 1.4. На других версиях не проверял. если вы проверяли другую версию, дайте мне знать. ты - person Seyed Mohammadreza; 31.10.2020