无法为 Laravel Voyager 中的关系重新创建 DataRow
Unable to recreate DataRow for relationship in Laravel Voyager
我升级到 laravel 5.5 和 Voyager 1.0 并在 vagrant box 上使用 mysql。
我想在 data_rows table 上为用户和商店之间的关系添加一个条目。我可以使用 Voyager 的 gui 创建条目。
这会创建相应的 table 条目
当我将所有这些值复制到我的播种机时
$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 无效。当我将它逐字复制到我的播种机时,我不明白这是怎么回事。是否在另一个 table 上添加了一些其他条目或缓存了我的播种器没有考虑的条目?我已经浏览了数据库条目,但找不到任何明显的内容。
编辑
添加此行以参考问题,因为我发现它与问题相关
@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"
让这成为转义字符的重要一课。
我知道这是几年前的事了,但我会为 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();
}
我升级到 laravel 5.5 和 Voyager 1.0 并在 vagrant box 上使用 mysql。
我想在 data_rows table 上为用户和商店之间的关系添加一个条目。我可以使用 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 无效。当我将它逐字复制到我的播种机时,我不明白这是怎么回事。是否在另一个 table 上添加了一些其他条目或缓存了我的播种器没有考虑的条目?我已经浏览了数据库条目,但找不到任何明显的内容。
编辑
添加此行以参考问题,因为我发现它与问题相关
@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"
让这成为转义字符的重要一课。
我知道这是几年前的事了,但我会为 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();
}