在Laravel中隐藏Eloquent模型中的数字字段

时间:2015-05-11 08:09:15

标签: php json laravel eloquent

我的模型中有字段名称是数字(我无法控制它的名字)。 当我尝试从我的模型中获取值时,我得到一个异常,然后让这些字段一切正常

这个工作正常,直到添加了数字字段。

Model::find($id)->name;

我得到Trying to get property of non-object

我尝试使用protected hidden数组将其隐藏在我的JSON中,但'0'0'{0}'似乎都无效。

这是错误

{
"errors": "Sorry, something went wrong.",
"exception": "Symfony\\Component\\Debug\\Exception\\FatalErrorException",
"message": "Uncaught exception 'ErrorException' with message 'Trying to get property of non-object' in /home/david/workspace/papw2/jukebox/api/app/AlbumComment.php:18\nStack trace:\n#0 /home/david/workspace/papw2/jukebox/api/app/AlbumComment.php(18): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'Trying to get p...', '/home/david/wor...', 18, Array)\n#1 /home/david/workspace/papw2/jukebox/api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2669): App\\AlbumComment->getUserAttribute(NULL)\n#2 /home/david/workspace/papw2/jukebox/api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2681): Illuminate\\Database\\Eloquent\\Model->mutateAttribute('user', NULL)\n#3 /home/david/workspace/papw2/jukebox/api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2435): Illuminate\\Database\\Eloquent\\Model->mutateAttributeForArray('user', NULL)\n#4 /home/david/workspace/papw2/jukebox/api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2379): Illuminate\\Dat",
"trace": []

}

这个的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

已更新

目前在Laravel中这是不可能的,如第74行的vendor \ symfony \ var-dumper \ Symfony \ Component \ VarDumper \ Cloner \ VarCloner.php中的这行代码所示。


  if ($zval['zval_isref'] = $queue[$i][$k] === $cookie) {
                        $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null;
                    }

但是,如果你需要一个hack,你可以用以下代码替换VarCloner.php中的代码:


  if ($zval['zval_isref'] = (isset($queue[$i][$k])) ? ($queue[$i][$k] === $cookie) : false) {
                        $zval['zval_hash'] = $v instanceof Stub ? spl_object_hash($v) : null;
                    }