我尝试使用Eloquent ORM在JOIN之后对某些结果进行分页时,我有一种奇怪的行为(由于我的错误)。
这是导致Laravel返回空白的代码(未显示错误)500错误页面:
return Entry::join('articles', 'entries.id', '=', 'articles.entryID')
->orderBy('articles.created_at', 'desc')
->paginate(15, array('articles.*'));
如果我将paginate(...)
与get(...)
交换,则会正确显示页面并返回数据。
修改:
这是我创建articles
和entries
表格的方式:
// Entries
Schema::create('entries', function($table) {
$table->string('app', 20);
$table->bigInteger('comments');
$table->bigIncrements('id');
$table->string('owner', 255)
->foreign('owner')
->references('username')
->on('users');
$table->dateTime('timestamp');
$table->bigInteger('views');
$table->bigInteger('votes');
$table->dateTime('created_at');
$table->dateTime('deleted_at');
$table->dateTime('updated_at');
});
// Articles
Schema::create('articles', function($table) {
$table->bigIncrements('id');
$table->string('author')
->foreign('author')
->references('username')
->on('users');
$table->text('content');
$table->bigInteger('entryID')
->foreign('entryID')
->references('id')
->on('entries');
$table->string('status', 20);
$table->string('summary', 1000);
$table->string('title', 255);
$table->dateTime('created_at');
$table->dateTime('deleted_at');
$table->dateTime('updated_at');
});
编辑2 :
这是我在laravel.log
中得到的:
[2014-08-26 19:59:54] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Allowed memory size of 134217728 bytes exhausted (tried to allocate 129499136 bytes)' in /usr/share/nginx/html/webname/vendor/laravel/framework/src/Illuminate/Support/helpers.php:605
Stack trace:
#0 [internal function]: Illuminate\Exception\Handler->handleShutdown()
#1 {main} [] []
编辑3 :
我已使用
禁用了内存限制和日志DB::connection()->disableQueryLog();
ini_set('memory_limit', '-1');
但整个系统会冻结大约1分钟,就像它开始循环一样。
编辑4 :
我也在这里添加了我的问题:http://help.laravel.io/00f4a0793d2291d73214e0b6f56320b84caaf51d
编辑5 :
我的系统看起来有问题,或者它是Laravel中的一个错误。
我还试图手动创建分页器:
$entries = Entry::join('articles', 'entries.id', '=', 'articles.entryID')
->orderBy('entries.created_at', 'desc')
->get(); // Data is correctly retrieved from the DB
$paginator = Paginator::make($entries->toArray(), self::count());
dd($paginator);
die();
页面仍然没有呈现,我一直收到错误:Allowed memory size of 134217728 bytes exhausted
答案 0 :(得分:0)
查看Eloquent的分页方法;理论上,它应该工作。 Eloquent很棒,但就个人而言,我发现Fluent更适合使用join()
s
return DB::table('entries')
->join('articles', 'entries.id', '=', 'articles.entryID')
->orderBy('articles.created_at', 'desc')
->select('articles.*')
->paginate(15);
答案 1 :(得分:0)
我刚发现问题是由以下原因造成的:
dd($pagination)
看起来我无法转储函数返回的paginator对象。