【问题标题】:Hide number field from Eloquent model in Laravel在 Laravel 的 Eloquent 模型中隐藏数字字段
【发布时间】:2015-07-21 15:43:07
【问题描述】:

我的模型中有字段名称是数字(我无法控制它的名称)。 当我尝试从我的模型中获取值时,我得到一个异常,在拥有这些字段之前一切都很好

在添加数字字段之前,这工作正常。

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": []

}

正确的语法是什么?

【问题讨论】:

  • 标识符可以以数字开头,但除非被引用,否则可能不仅仅由数字组成。尝试使用像 ` 0 ` 这样的反引号:
  • 您在这里遇到了两个不同的问题。一个是Trying to get property of non-object。这可能是由Model::find($id) 返回null 引起的。另一个问题是您的数字列名。目前无法隐藏它们,其他功能可能也无法正常工作。这主要是由于 PHP 的输入方式非常错误......
  • 所以,除非我破解 laravel,否则这是不可能的。谢谢。
  • 矢量面团你接受了我的回答我想知道黑客是否对你有用。我打开一个问题github.com/laravel/framework/issues/8710,我希望大老板@lukasgeiter 可以提供帮助:)
  • 我解决了这个问题并进行了重构,因此不再有编号的列。也许这个周末我可以测试一下。

标签: php json laravel eloquent


【解决方案1】:

更新

目前这在 Laravel 中是不可能的,这可以从位于 vendor\symfony\var-dumper\Symfony\Component\VarDumper\Cloner\VarCloner.php 中第 74 行的这行代码中看到。


  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;
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2011-09-13
    • 2011-06-08
    • 1970-01-01
    • 2016-05-31
    • 2011-10-08
    • 2017-09-19
    相关资源
    最近更新 更多