Laravel在create方法上抛出错误

时间:2017-04-27 05:53:06

标签: php laravel eloquent

$permission = new Permission();
$permPost = $permission->create([ 
    'name'        => 'post',
    'slug'        => [          // pass an array of permissions.
        'create'     => true,
        'view'       => true,
        'update'     => true,
        'delete'     => true
    ],
    'description' => 'manage post permissions'
]);

在create method laravel 5.4上的数组中传递数组时抛出错误:

  

数组到字符串转换(SQL:插入权限(名称,slug,description,updated_at,created_at)值(post,1,manage post permissions,2017-04-27 05:32:41,2017-04-27 5时32分41秒))

3 个答案:

答案 0 :(得分:3)

slug字段上尝试json_encode,然后将其传递给Eloquent以保留在DB中:

'slug' => json_encode([
   'create' => true,
   'view'   => true,
   'update' => true,
   'delete' => true
)]

答案 1 :(得分:3)

Laravel允许Array & JSON Casting mutator:

只需更新您的权限模型即可:

protected $casts = [
    'slug' => 'array',
];

来自文档:

  

定义了强制转换后,您可以访问options属性,它将自动从JSON反序列化为PHP数组。设置options属性的值时,给定的数组将自动序列化为JSON以进行存储

所以,现在你不需要手动编码,Laravel会自动为你做所有事情! 只需将数组作为数组传递。

答案 2 :(得分:0)

Slug是数据库中的一个字符串。您将数组传递给它。

您可以将其存储为JSON或Serialise,但这是数据库设计的气味。您应该考虑正确存储此数据所需的其他表,具体取决于它将如何在您的应用程序中的其他位置使用。