在模型上运行json encode时超出了max_nesting_level

时间:2017-04-19 15:47:37

标签: php json apache model laravel-5.3

我在laravel(5.3)中有一个模型,表示像这样的迁移:

$table->integer('request_id', true);
$table->string('type_request', 3);
$table->integer('user_id');
$table->string('mis_ord', 25)->nullable();
$table->string('mis_ord_production', 25)->nullable();
$table->dateTime('timestamp_create')->nullable();
$table->timestamp('timestamp_update')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->dateTime('timestamp_processed')->nullable();
$table->integer('prod_hg_id')->index('fk_requests_prod_hg_idx');
$table->integer('prod_sg_id')->index('fk_requests_prod_sg_idx');
$table->string('descr', 50)->nullable();
$table->integer('quantity_2del');
$table->dateTime('date_time_2del')->nullable();
$table->integer('quantity_del')->nullable();
$table->dateTime('date_time_del')->nullable();
$table->integer('basket_id')->index('fk_request_basket_idx');
$table->string('ref_customer', 100)->nullable();
$table->decimal('price', 12)->nullable()->default(0.00);
$table->decimal('price_calc', 12)->nullable()->default(0.00);
$table->decimal('discount_prc', 12)->nullable()->default(0.00);
$table->decimal('discount_bdr', 12)->nullable()->default(0.00);
$table->integer('env_id')->nullable()->index('fk_xps_envelop_idx');
$table->integer('alternative_from')->nullable();
$table->integer('version')->nullable()->default(0);
$table->integer('version_id')->nullable();
$table->string('remark', 256)->nullable();
$table->integer('art_id')->nullable()->index('fk_xps_request_art_idx');
$table->integer('request_status_id')->nullable();
$table->integer('sys_bu_id')->unsigned()->nullable();
$table->boolean('digital')->default(0);
$table->foreign('sys_bu_id')->references('id')->on('sys_bu');

当我尝试像这样json_encode这个模型的实例时:

$xpsRequest = xpsRequest::find($id);
json_encode($xpsRequest);

我的日志中出现错误: 致命错误:达到'256'的最大函数嵌套级别,正在中止!

我尝试将xdebug.max_nesting_level设置为1000,但即使我运行json_encode($ xpsRequest,JSON_NUMERIC_CHECK,1),仍会触发相同的错误; 我也尝试过json_encode一个只包含一个数字的变量,它没有任何问题。我还尝试从模型中删除所有变量和函数,因此从技术上讲它是一个简单的模型,但问题仍然存在。

这个问题只出现在我的机器上,我有同事没有这个问题。

我确认所有设置都相同,但这并没有解决我的问题。 我目前正在运行:
-Windows 8.1 Pro。
-Apache 2.4.23
-Php 5.6.25
-Mysql 5.7.14

如果有人知道可能会发生什么,或者我如何进一步解决问题,欢迎任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:1)

laravel对象比数据值复杂得多。它可能会尝试解决所有关系,你可能会进入递归循环。

要正确执行此操作,必须使用laravel序列化方法。所以你的代码看起来像这样:

$xpsRequest = xpsRequest::find($id);
echo $xpsRequest->toJson();

摘自此处的文档:https://laravel.com/docs/5.3/eloquent-serialization

由于这似乎没有解决问题(laravel似乎并没有将它限制在对象中并且无论如何都是我的猜测)你可以尝试使用attributesToArray方法。

这应该只为您提供对象的属性,而不是与它的关系,从而产生以下代码:

$xpsRequest = xpsRequest::find($id);
echo json_encode($xpsRequest->attributesToArray());