Skip to content

Commit

Permalink
Create EloquentModelLoadSumTest.php
Browse files Browse the repository at this point in the history
  • Loading branch information
milwad-dev committed Jan 13, 2024
1 parent 29ee0fc commit 1ee5639
Showing 1 changed file with 103 additions and 0 deletions.
103 changes: 103 additions & 0 deletions tests/Integration/Database/EloquentModelLoadSumTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?php

namespace Illuminate\Tests\Integration\Database\EloquentModelLoadSumTest;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Tests\Integration\Database\DatabaseTestCase;

class EloquentModelLoadSumTest extends DatabaseTestCase
{
protected function afterRefreshingDatabase()
{
Schema::create('base_models', function (Blueprint $table) {
$table->increments('id');
});

Schema::create('related1s', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('base_model_id');
$table->integer('number');
});

Schema::create('related2s', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('base_model_id');
$table->integer('number');
});

BaseModel::create();

Related1::create(['base_model_id' => 1, 'number' => 10]);
Related1::create(['base_model_id' => 1, 'number' => 11]);
Related2::create(['base_model_id' => 1, 'number' => 12]);
}

public function testLoadSumSingleRelation()
{
$model = BaseModel::first();

DB::enableQueryLog();

$model->loadSum('related1', 'number');

$this->assertCount(1, DB::getQueryLog());
$this->assertEquals(21, $model->related1_sum_number);
}

public function testLoadSumMultipleRelations()
{
$model = BaseModel::first();

DB::enableQueryLog();

$model->loadSum(['related1', 'related2'], 'number');

$this->assertCount(1, DB::getQueryLog());
$this->assertEquals(21, $model->related1_sum_number);
$this->assertEquals(12, $model->related2_sum_number);
}
}

class BaseModel extends Model
{
public $timestamps = false;

protected $guarded = [];

public function related1()
{
return $this->hasMany(Related1::class);
}

public function related2()
{
return $this->hasMany(Related2::class);
}
}

class Related1 extends Model
{
public $timestamps = false;

protected $fillable = ['base_model_id', 'number'];

public function parent()
{
return $this->belongsTo(BaseModel::class);
}
}

class Related2 extends Model
{
public $timestamps = false;

protected $fillable = ['base_model_id', 'number'];

public function parent()
{
return $this->belongsTo(BaseModel::class);
}
}

0 comments on commit 1ee5639

Please sign in to comment.