Model :: all()在Laravel中不起作用 - 其他查询也可以

时间:2015-01-21 20:44:34

标签: php laravel eloquent

我是Laravel的新手,我继承了一个项目,我需要把它放在不同的服务器上。要明确我没有写这个应用程序,也不是Laravel专家。

话虽这么说,应用确实看起来相当稳固,我对框架印象深刻。我使用的最后一个PHP框架是Cake,它看起来像是旧版Rails的笨重克隆,这看起来好多了 - 但我离题了。

无论如何。其中一个视图在新服务器上呈现空白页面。我一行一行地注释掉,直到我再次开始工作。罪魁祸首是这一行:

$leads = Lead::all()->count();

当我评论它并用加载页面的整数替换前景变量时。

我通过使用它来解决问题:

DB::table('leads')->count()

现在它运作正常。

我仍然感到困惑,但是为什么这可以在旧服务器上运行(BTW年龄明显更新)但不是这个。

我没有旧服务器上的确切规格,但我将其移动到的服务器是运行php 5.4.12的 ubuntu框

MySQL是外部托管的,网站的两个实例都连接到它。

Lead模型如下所示:

    <?php

    class Lead extends Eloquent {

        protected $guarded = array();


        public function results()
        {
            return $this->hasMany('Result');
        }

        public function items()
        {
            return $this->hasMany('Item');
        }

    }

?>

重复:: all()代码我在其他服务器实例上运行时没有错误,只是没有在较新的设置上运行。

谢谢!

2 个答案:

答案 0 :(得分:2)

我缩小了问题的范围,然后再回过头来获取更多信息 - 例如,第一步是定义不工作的意思。

$leads = Lead::all()->count()实际上是否会返回一个值,但是这个值会使应用程序的另一部分中断吗?或者是$leads = Lead::all()->count()打电话来打破事情?

您对错误的描述

  

其中一个视图一直在新服务器上呈现空白页面

使这听起来像PHP错误。由于Laravel应该抛出自己的错误(无论是一般错误页面,还是打开调试模式时出现Whoops错误),听起来你都在处理Laravel的错误处理程序可以解决的问题。抓住。

您需要正确获取PHP错误日志记录设置。 PHP通常会记录到自定义错误文件或apache / web-server日志。这可能是非常难以设置 - 我从一个独立的PHP页面开始,显然有错误

<?php
//no ending ; to create a parse error
$test = 1+1

并使用它来确定如何/在哪里记录通用PHP错误。完成上述操作后,您将能够详细了解调用时PHP / Laravel崩溃的原因。另外,在你的janky代码行前面放一个ini_set('display_errors', 1);有时候足以让PHP把错误吐出到浏览器。

所有这一切,all中对Lead::all()->count()的调用实际上会加载整个集合对象(内存饥饿),然后对其进行计数。对DB::table('leads')->count()的调用应使用简单的SQL计数(*)。加上PHP错误(与Laravel相比)会让我指向新服务器上的PHP memory_limit较低,和/或旧版本的PHP具有较低效率的对象处理消耗更多内存。

答案 1 :(得分:0)

嗯,这取决于您使用的laravel的版本,如果它是新的,5.0,

  

$ leads = User :: where(&#39; votes&#39;,&#39;&gt;&#39;,100) - &gt; get();

     

$ count = $ leads-&gt; count();

这样的事情肯定会奏效。