EloquentModelLoadCountTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. namespace Illuminate\Tests\Integration\Database\EloquentModelLoadCountTest;
  3. use DB;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Database\Eloquent\SoftDeletes;
  6. use Illuminate\Database\Schema\Blueprint;
  7. use Illuminate\Support\Facades\Schema;
  8. use Illuminate\Tests\Integration\Database\DatabaseTestCase;
  9. class EloquentModelLoadCountTest extends DatabaseTestCase
  10. {
  11. protected function defineDatabaseMigrationsAfterDatabaseRefreshed()
  12. {
  13. Schema::create('base_models', function (Blueprint $table) {
  14. $table->increments('id');
  15. });
  16. Schema::create('related1s', function (Blueprint $table) {
  17. $table->increments('id');
  18. $table->unsignedInteger('base_model_id');
  19. });
  20. Schema::create('related2s', function (Blueprint $table) {
  21. $table->increments('id');
  22. $table->unsignedInteger('base_model_id');
  23. });
  24. Schema::create('deleted_related', function (Blueprint $table) {
  25. $table->increments('id');
  26. $table->unsignedInteger('base_model_id');
  27. $table->softDeletes();
  28. });
  29. BaseModel::create();
  30. Related1::create(['base_model_id' => 1]);
  31. Related1::create(['base_model_id' => 1]);
  32. Related2::create(['base_model_id' => 1]);
  33. DeletedRelated::create(['base_model_id' => 1]);
  34. }
  35. public function testLoadCountSingleRelation()
  36. {
  37. $model = BaseModel::first();
  38. DB::enableQueryLog();
  39. $model->loadCount('related1');
  40. $this->assertCount(1, DB::getQueryLog());
  41. $this->assertEquals(2, $model->related1_count);
  42. }
  43. public function testLoadCountMultipleRelations()
  44. {
  45. $model = BaseModel::first();
  46. DB::enableQueryLog();
  47. $model->loadCount(['related1', 'related2']);
  48. $this->assertCount(1, DB::getQueryLog());
  49. $this->assertEquals(2, $model->related1_count);
  50. $this->assertEquals(1, $model->related2_count);
  51. }
  52. public function testLoadCountDeletedRelations()
  53. {
  54. $model = BaseModel::first();
  55. $this->assertNull($model->deletedrelated_count);
  56. $model->loadCount('deletedrelated');
  57. $this->assertEquals(1, $model->deletedrelated_count);
  58. DeletedRelated::first()->delete();
  59. $model = BaseModel::first();
  60. $this->assertNull($model->deletedrelated_count);
  61. $model->loadCount('deletedrelated');
  62. $this->assertEquals(0, $model->deletedrelated_count);
  63. }
  64. }
  65. class BaseModel extends Model
  66. {
  67. public $timestamps = false;
  68. protected $guarded = [];
  69. public function related1()
  70. {
  71. return $this->hasMany(Related1::class);
  72. }
  73. public function related2()
  74. {
  75. return $this->hasMany(Related2::class);
  76. }
  77. public function deletedrelated()
  78. {
  79. return $this->hasMany(DeletedRelated::class);
  80. }
  81. }
  82. class Related1 extends Model
  83. {
  84. public $timestamps = false;
  85. protected $fillable = ['base_model_id'];
  86. public function parent()
  87. {
  88. return $this->belongsTo(BaseModel::class);
  89. }
  90. }
  91. class Related2 extends Model
  92. {
  93. public $timestamps = false;
  94. protected $fillable = ['base_model_id'];
  95. public function parent()
  96. {
  97. return $this->belongsTo(BaseModel::class);
  98. }
  99. }
  100. class DeletedRelated extends Model
  101. {
  102. use SoftDeletes;
  103. public $timestamps = false;
  104. protected $fillable = ['base_model_id'];
  105. public function parent()
  106. {
  107. return $this->belongsTo(BaseModel::class);
  108. }
  109. }