分页并加入Laravel

时间:2014-08-26 15:06:31

标签: laravel pagination

我尝试使用Eloquent ORM在JOIN之后对某些结果进行分页时,我有一种奇怪的行为(由于我的错误)。

这是导致Laravel返回空白的代码(未显示错误)500错误页面:

return Entry::join('articles', 'entries.id', '=', 'articles.entryID')
        ->orderBy('articles.created_at', 'desc')
        ->paginate(15, array('articles.*'));

如果我将paginate(...)get(...)交换,则会正确显示页面并返回数据。

修改

这是我创建articlesentries表格的方式:

// 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

2 个答案:

答案 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对象。