The model morph addon for Hyperf.
composer require friendsofhyperf/model-morph-addon
<?php
namespace App\Model;
class Image extends Model
{
public function imageable()
{
return $this->morphTo();
}
}
class Book extends Model
{
public function images()
{
return $this->morphMany(Image::class, 'imageable');
}
}
class User extends Model
{
public function images()
{
return $this->morphMany(Image::class, 'imageable');
}
}
// Global
Relation::morphMap([
'user' => App\Model\User::class,
'book' => App\Model\Book::class,
]);
<?php
namespace App\Model;
class Image extends Model
{
public function imageable()
{
return $this->morphTo();
}
// Privately-owned
public static function getActualClassNameForMorph($class)
{
$morphMap = [
'user' => User::class,
'book' => Book::class,
];
return Arr::get($morphMap, $class, $class);
}
}
class Book extends Model
{
public function images()
{
return $this->morphMany(Image::class, 'imageable');
}
public function getMorphClass()
{
return 'book';
}
}
class User extends Model
{
public function images()
{
return $this->morphMany(Image::class, 'imageable');
}
public function getMorphClass()
{
return 'user';
}
}