我升级到了laravel 5.5和Voyager 1.0,并在流浪盒上使用了mysql。
我想在data_rows表中添加一个条目,用于用户和商店之间的关系。我可以使用Voyager的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; ?>
这意味着存储在详细信息字段中的json无效。我不明白当我将它复制到我的播种机时,它是怎么回事。是否有其他条目添加到另一个表或缓存,我的播种机没有考虑?我已经遍历了db条目,找不到任何明显的东西。
修改
在我发现这个问题与问题相关时添加这一行
@php $relationshipDetails = json_decode($relationship['details']); @endphp
答案 0 :(得分:0)
所以这对我来说有点愚蠢。我的播种机插入了我定义的字符串; "model":"App\\User"
,我认为这足以让\
字符进入数据库。它是什么。问题出在我添加到问题的最后一行。
json_decode($relationship['details'])
调用此函数时,它会尝试从数据库中的字符串创建一个json对象。不幸的是,它没有成功创建json对象,因为播种器将字符串"model":"App\User"
插入到数据库中。
为了解决这个问题,我改变了播种机中的字符串声明
"model":"App\\\\User"
以
的形式插入到我的数据库中 "model":"App\\User"
当它通过json_decode
时,它变为
"model": "App\User"
让这成为逃脱角色的重要课程。
答案 1 :(得分: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();
}