Laravel 4白屏使用雄辩

时间:2014-04-12 22:34:21

标签: laravel eloquent

我试图使用Eloquent将一组数据库条目传递给视图。我是MVC开发的新手。代码如下:

School.php (模特)

class School extends Eloquent 
{
 protected $table = 'Schools';
 public $timestamps = false; 
 protected $softDelete = false;

 public function school()   
 {
    return $this->hasOne('School');
 }

}

SchoolController.php (控制器)

class SchoolController extends BaseController 
{
    public $restful = true;

    public function getIndex()
    {
        return View::make('schools')
            ->with('schools', School::all()); 
    }
}

schools.blade.php (查看)

@extends('layouts.schools')

@section('school-search')

<ul>
@foreach($schools as $school)
    <li>{{ $school->name }}</li>
@endforeach
</ul>
@stop

然而,当我加载页面时,我得到了白屏死机。当我用(&#39; schools&#39;,School :: all())&#34;评论&#34; - &gt;时,视图工作正常。部分,所以我认为它与Laravel无法访问School对象有关。我用google搜索/ stackoverflow了一下,找不到有类似问题的人。

谢谢!

编辑:一些相关信息: 我之前遇到过这个问题,它会将我发送的任何内容放到屏幕上,但是我通过更改应用/存储权限来纠正这个问题。更改权限似乎无助于解决此问题。

Laravel好像报错了。当我的代码中有某些内容没有意义时,我会收到错误。

我们处于开发环境中。

编辑:

当我运行php artisan serve时,它会出现错误&#34;这个php二进制文件不是版本5.4或更高版本&#34;这可能是相关的吗?

编辑:

我已更新到PHP 5.4。仍然是白人筛选。这是我的错误日志中的最新内容。

#0 /var/www/playground/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php(29): Illuminate\Foundation\Console\ServeCommand->checkPhpVersion()
#1 /var/www/playground/vendor/laravel/framework/src/Illuminate/Console/Command.php(108): Illuminate\Foundation\Console\ServeCommand->fire()
#2 /var/www/playground/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(241): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /var/www/playground/vendor/laravel/framework/src/Illuminate/Console/Command.php(96): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 /var/www/playground/vendor/symfony/console/Symfony/Component/Console/Application.php(892): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#5 /var/www/playground/vendor/symfony/console/Symfony/Component/Console/Application.php(191): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Foundation\Console\ServeCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 /var/www/playground/vendor/symfony/console/Symfony/Component/Console/Application.php(121): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 /var/www/playground/artisan(59): Symfony\Component\Console\Application->run()
#8 {main} [] []

2 个答案:

答案 0 :(得分:3)

问题出在你的 School.php的关系定义上。

public function school()
{
   return $this->hasOne('School');
}

通过这个你告诉laravel这个模型与它自己有one-to-one / one-to-many的关系,这会在调用School::all()时导致递归循环。一旦循环超过php.ini中设置的最大允许内存大小,它将返回空响应。这就是为什么你得到一个空白的屏幕。

这种关系对我来说似乎不合逻辑,但如果学校是分层的,你应该将方法名称school()更改为parent(),以避免混淆laravel。例如..

public function parent()
{
   return $this->hasOne('School', 'parent_id');
}

答案 1 :(得分:1)

class School extends Eloquent 
{
 protected $table = 'Schools';
 public $timestamps = false; 
 protected $softDelete = false;

 public function school()   
 {
    return $this->hasOne('School');
 }

}

你有一个学校对象与另一个学校对象有一对一的关系吗?您还没有定义关系的外键

我认为laravel只是在学校对象之后递归加载学校对象,然后在它可以构建错误之前耗尽内存。你可以通过注释掉整个school()函数并看看会发生什么来测试它。

您还可以访问apache错误日志吗?