1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
<?php
namespace Illuminate\Tests\Integration\Database\EloquentPaginateTest;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Tests\Integration\Database\DatabaseTestCase;
/**
* @group integration
*/
class EloquentPaginateTest extends DatabaseTestCase
{
protected function setUp(): void
{
parent::setUp();
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->nullable();
$table->unsignedInteger('user_id')->nullable();
$table->timestamps();
});
Schema::create('users', function ($table) {
$table->increments('id');
$table->timestamps();
});
}
public function testPaginationOnTopOfColumns()
{
for ($i = 1; $i <= 50; $i++) {
Post::create([
'title' => 'Title '.$i,
]);
}
$this->assertCount(15, Post::paginate(15, ['id', 'title']));
}
public function testPaginationWithDistinct()
{
for ($i = 1; $i <= 3; $i++) {
Post::create(['title' => 'Hello world']);
Post::create(['title' => 'Goodbye world']);
}
$query = Post::query()->distinct();
$this->assertEquals(6, $query->get()->count());
$this->assertEquals(6, $query->count());
$this->assertEquals(6, $query->paginate()->total());
}
public function testPaginationWithDistinctAndSelect()
{
// This is the 'broken' behaviour, but this test is added to show backwards compatibility.
for ($i = 1; $i <= 3; $i++) {
Post::create(['title' => 'Hello world']);
Post::create(['title' => 'Goodbye world']);
}
$query = Post::query()->distinct()->select('title');
$this->assertEquals(2, $query->get()->count());
$this->assertEquals(6, $query->count());
$this->assertEquals(6, $query->paginate()->total());
}
public function testPaginationWithDistinctColumnsAndSelect()
{
for ($i = 1; $i <= 3; $i++) {
Post::create(['title' => 'Hello world']);
Post::create(['title' => 'Goodbye world']);
}
$query = Post::query()->distinct('title')->select('title');
$this->assertEquals(2, $query->get()->count());
$this->assertEquals(2, $query->count());
$this->assertEquals(2, $query->paginate()->total());
}
public function testPaginationWithDistinctColumnsAndSelectAndJoin()
{
for ($i = 1; $i <= 5; $i++) {
$user = User::create();
for ($j = 1; $j <= 10; $j++) {
Post::create([
'title' => 'Title '.$i,
'user_id' => $user->id,
]);
}
}
$query = User::query()->join('posts', 'posts.user_id', '=', 'users.id')
->distinct('users.id')->select('users.*');
$this->assertEquals(5, $query->get()->count());
$this->assertEquals(5, $query->count());
$this->assertEquals(5, $query->paginate()->total());
}
}
class Post extends Model
{
protected $guarded = [];
}
class User extends Model
{
protected $guarded = [];
}
|