123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace Illuminate\Tests\Integration\Database\EloquentBelongsToTest;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Schema\Blueprint;
- use Illuminate\Support\Facades\Schema;
- use Illuminate\Support\Str;
- use Illuminate\Tests\Integration\Database\DatabaseTestCase;
- class EloquentBelongsToTest extends DatabaseTestCase
- {
- protected function defineDatabaseMigrationsAfterDatabaseRefreshed()
- {
- Schema::create('users', function (Blueprint $table) {
- $table->increments('id');
- $table->string('slug')->nullable();
- $table->unsignedInteger('parent_id')->nullable();
- $table->string('parent_slug')->nullable();
- });
- $user = User::create(['slug' => Str::random()]);
- User::create(['parent_id' => $user->id, 'parent_slug' => $user->slug]);
- }
- public function testHasSelf()
- {
- $users = User::has('parent')->get();
- $this->assertCount(1, $users);
- }
- public function testHasSelfCustomOwnerKey()
- {
- $users = User::has('parentBySlug')->get();
- $this->assertCount(1, $users);
- }
- public function testAssociateWithModel()
- {
- $parent = User::doesntHave('parent')->first();
- $child = User::has('parent')->first();
- $parent->parent()->associate($child);
- $this->assertEquals($child->id, $parent->parent_id);
- $this->assertEquals($child->id, $parent->parent->id);
- }
- public function testAssociateWithId()
- {
- $parent = User::doesntHave('parent')->first();
- $child = User::has('parent')->first();
- $parent->parent()->associate($child->id);
- $this->assertEquals($child->id, $parent->parent_id);
- $this->assertEquals($child->id, $parent->parent->id);
- }
- public function testAssociateWithIdUnsetsLoadedRelation()
- {
- $child = User::has('parent')->with('parent')->first();
- // Overwrite the (loaded) parent relation
- $child->parent()->associate($child->id);
- $this->assertEquals($child->id, $child->parent_id);
- $this->assertFalse($child->relationLoaded('parent'));
- }
- public function testParentIsNotNull()
- {
- $child = User::has('parent')->first();
- $parent = null;
- $this->assertFalse($child->parent()->is($parent));
- $this->assertTrue($child->parent()->isNot($parent));
- }
- public function testParentIsModel()
- {
- $child = User::has('parent')->first();
- $parent = User::doesntHave('parent')->first();
- $this->assertTrue($child->parent()->is($parent));
- $this->assertFalse($child->parent()->isNot($parent));
- }
- public function testParentIsNotAnotherModel()
- {
- $child = User::has('parent')->first();
- $parent = new User;
- $parent->id = 3;
- $this->assertFalse($child->parent()->is($parent));
- $this->assertTrue($child->parent()->isNot($parent));
- }
- public function testNullParentIsNotModel()
- {
- $child = User::has('parent')->first();
- $child->parent()->dissociate();
- $parent = User::doesntHave('parent')->first();
- $this->assertFalse($child->parent()->is($parent));
- $this->assertTrue($child->parent()->isNot($parent));
- }
- public function testParentIsNotModelWithAnotherTable()
- {
- $child = User::has('parent')->first();
- $parent = User::doesntHave('parent')->first();
- $parent->setTable('foo');
- $this->assertFalse($child->parent()->is($parent));
- $this->assertTrue($child->parent()->isNot($parent));
- }
- public function testParentIsNotModelWithAnotherConnection()
- {
- $child = User::has('parent')->first();
- $parent = User::doesntHave('parent')->first();
- $parent->setConnection('foo');
- $this->assertFalse($child->parent()->is($parent));
- $this->assertTrue($child->parent()->isNot($parent));
- }
- }
- class User extends Model
- {
- public $timestamps = false;
- protected $guarded = [];
- public function parent()
- {
- return $this->belongsTo(self::class, 'parent_id');
- }
- public function parentBySlug()
- {
- return $this->belongsTo(self::class, 'parent_slug', 'slug');
- }
- }
|