Laravel 的 Artisan 的无限递归

Posted

技术标签:

【中文标题】Laravel 的 Artisan 的无限递归【英文标题】:Infinite recursion on Laravel's Artisan 【发布时间】:2016-12-31 19:15:10 【问题描述】:

我总是用var_dump's 调试我的代码,而且我经常使用var_dump-ing。

到目前为止,我已经使用 Laravel 大约一个月了,从第一天开始,我就遇到了无限递归的烦人情况,这让我重新启动计算机。

我仍然不确定是什么原因造成的,但可能是 Eloquent 集合。让我写下这个问题的最后一段代码是:

模型申请人.php

public function resumes()
        return $this->hasMany('\MyApp\Resume');

我将$applicant 保存到会话中,并且在视图中我做了:

var_dump(Session::get('applicant')->resumes());

我知道正确的方法是->resumes,称它为属性而不是方法,但我很想知道为什么这会使我的 Ubuntu 崩溃、内存不足、迫使我重新启动。

有没有办法配置 artisan 来防止这种情况发生?为什么会这样?!

@edit

当我在没有->get()->all() 的情况下执行类似的操作时,也会出现同样的问题

var_dump(Model::where('field',$val));

【问题讨论】:

【参考方案1】:

您可以尝试将模型密钥保存到会话而不是模型吗?

Session::put('applicant_id',$applicant->getKey());

那么什么时候取回它

public function getApplicantFromSession() 
    static $applicant;
    if(is_null($applicant)) 
        $applicant = Applicant::find(Session::get('applicant_id'));
    
    return $applicant;


然后要获得我会使用的简历:

public function getApplicantResumes() 
   $applicant = $this->getApplicantFromSession();
   if(!is_null($applicant)) 
      return $applicant->resumes;
   
   return collect([]);

【讨论】:

以上是关于Laravel 的 Artisan 的无限递归的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 与 artisan serve 合作,但不适用于 vhost

PHP Artisan 服务 - 间歇性

Laravel 的Artisan 命令学习

Laravel 5 应用命名空间

Laravel自定义artisan命令在Sell中运行

laravel 无法打开输入文件:artisan (5.3)