123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
- namespace Illuminate\Tests\Integration\Database\EloquentWithCountTest;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Schema\Blueprint;
- use Illuminate\Support\Facades\Schema;
- use Illuminate\Tests\Integration\Database\DatabaseTestCase;
- class EloquentWithCountTest extends DatabaseTestCase
- {
- protected function defineDatabaseMigrationsAfterDatabaseRefreshed()
- {
- Schema::create('one', function (Blueprint $table) {
- $table->increments('id');
- });
- Schema::create('two', function (Blueprint $table) {
- $table->increments('id');
- $table->integer('one_id');
- });
- Schema::create('three', function (Blueprint $table) {
- $table->increments('id');
- $table->integer('two_id');
- });
- Schema::create('four', function (Blueprint $table) {
- $table->increments('id');
- $table->integer('one_id');
- });
- }
- public function testItBasic()
- {
- $one = Model1::create();
- $two = $one->twos()->Create();
- $two->threes()->Create();
- $results = Model1::withCount([
- 'twos' => function ($query) {
- $query->where('id', '>=', 1);
- },
- ]);
- $this->assertEquals([
- ['id' => 1, 'twos_count' => 1],
- ], $results->get()->toArray());
- }
- public function testGlobalScopes()
- {
- $one = Model1::create();
- $one->fours()->create();
- $result = Model1::withCount('fours')->first();
- $this->assertEquals(0, $result->fours_count);
- $result = Model1::withCount('allFours')->first();
- $this->assertEquals(1, $result->all_fours_count);
- }
- public function testSortingScopes()
- {
- $one = Model1::create();
- $one->twos()->create();
- $query = Model1::withCount('twos')->getQuery();
- $this->assertNull($query->orders);
- $this->assertSame([], $query->getRawBindings()['order']);
- }
- }
- class Model1 extends Model
- {
- public $table = 'one';
- public $timestamps = false;
- protected $guarded = [];
- public function twos()
- {
- return $this->hasMany(Model2::class, 'one_id');
- }
- public function fours()
- {
- return $this->hasMany(Model4::class, 'one_id');
- }
- public function allFours()
- {
- return $this->fours()->withoutGlobalScopes();
- }
- }
- class Model2 extends Model
- {
- public $table = 'two';
- public $timestamps = false;
- protected $guarded = [];
- protected $withCount = ['threes'];
- protected static function boot()
- {
- parent::boot();
- static::addGlobalScope('app', function ($builder) {
- $builder->latest();
- });
- }
- public function threes()
- {
- return $this->hasMany(Model3::class, 'two_id');
- }
- }
- class Model3 extends Model
- {
- public $table = 'three';
- public $timestamps = false;
- protected $guarded = [];
- protected static function boot()
- {
- parent::boot();
- static::addGlobalScope('app', function ($builder) {
- $builder->where('id', '>', 0);
- });
- }
- }
- class Model4 extends Model
- {
- public $table = 'four';
- public $timestamps = false;
- protected $guarded = [];
- protected static function boot()
- {
- parent::boot();
- static::addGlobalScope('app', function ($builder) {
- $builder->where('id', '>', 1);
- });
- }
- }
|