diff --git a/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php b/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php index 67e44605eb4c..81d21484b7c3 100644 --- a/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php +++ b/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php @@ -499,6 +499,10 @@ public function getRelationValue($key) */ public function isRelation($key) { + if ($this->hasAttributeMutator($key)) { + return false; + } + return method_exists($this, $key) || (static::$relationResolvers[get_class($this)][$key] ?? null); } diff --git a/tests/Database/DatabaseEloquentRelationTest.php b/tests/Database/DatabaseEloquentRelationTest.php index 65df35655c26..b87b32637b09 100755 --- a/tests/Database/DatabaseEloquentRelationTest.php +++ b/tests/Database/DatabaseEloquentRelationTest.php @@ -4,6 +4,7 @@ use Exception; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasOne; @@ -281,6 +282,14 @@ public function testRelationResolvers() $this->assertInstanceOf(EloquentResolverRelationStub::class, $model->customer()); $this->assertSame(['key' => 'value'], $model->customer); } + + public function testIsRelationIgnoresAttribute() + { + $model = new EloquentRelationAndAtrributeModelStub; + + $this->assertTrue($model->isRelation('parent')); + $this->assertFalse($model->isRelation('field')); + } } class EloquentRelationResetModelStub extends Model @@ -351,3 +360,25 @@ public function getResults() return ['key' => 'value']; } } + +class EloquentRelationAndAtrributeModelStub extends Model +{ + protected $table = 'one_more_table'; + + public function field(): Attribute + { + return new Attribute( + function ($value) { + return $value; + }, + function ($value) { + return $value; + }, + ); + } + + public function parent() + { + return $this->belongsTo(self::class); + } +}