0

我升级到 laravel 5.5 和 Voyager 1.0,并在 vagrant box 上使用 mysql。

我想在 data_rows 表上为用户和商店之间的关系添加一个条目。我可以使用 Voyager 的 gui 创建条目。

建立关系 关系的gui视图在此处输入图像描述 当我将所有这些值复制到我的播种机中时, 它会创建相应的表条目

$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; ?>

这意味着存储在 details 字段中的 json 无效。当我将它逐字复制到播种机时,我不明白这是怎么回事。是否在另一个表上添加了其他条目或缓存了我的播种机没有考虑的其他条目?我已经浏览了数据库条目,找不到任何明显的东西。

编辑

在我发现它与问题相关时添加此行以引用问题

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

2 回答 2

1

所以这对我来说有点愚蠢。我的播种机正在插入一个我这样定义的字符串;"model":"App\\User",我认为这足以让\角色进入数据库。它是什么。问题出在我添加到问题中的最后一行。

json_decode($relationship['details'])

调用此函数时,它会尝试从数据库中的字符串创建一个 json 对象。不幸的是,它没有成功创建 json 对象,因为播种器将字符串"model":"App\User"插入数据库。

为了解决这个问题,我将播种机中的字符串声明改为

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

插入到我的数据库中

"model":"App\\User"

当它通过时json_decode它变成

"model": "App\User"

让这成为转义字符的重要一课。

于 2017-10-20T20:11:25.857 回答
0

我知道这是几年前的事了,但我会为那些新加入航海者并有这个问题的人回答这个问题。

一个简单的答案:详细使用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();
}

于 2020-10-15T07:59:47.120 回答