我试图使用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} [] []
答案 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错误日志吗?