Мне нужна помощь, чтобы правильно спроектировать мою базу данных. Я работаю с Laravel / Eloquent (ORM).
моя диаграмма показывает, что я хочу
На самом деле мои модели выглядят так:
Spe c ie Класс:
class Specie extends Model
{
protected $fillable = ['name'];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function animal()
{
return $this->hasOne('App\Animal', 'id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function missingAnimal()
{
return $this->hasOne('App\MissingAnimal', 'id');
}
}
Класс животных:
class Animal extends Model
{
/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false;
/**
* @var array
*/
protected $fillable = ['name', 'number_legs', 'others'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function species()
{
return $this->belongsTo('App\Species', 'id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function cat()
{
return $this->hasOne('App\Cat', 'id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function dog()
{
return $this->hasOne('App\Dog', 'id');
}
}
Пропавший класс животных:
class MissingAnimal extends Model
{
/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false;
/**
* @var array
*/
protected $fillable = ['name', 'number_legs', 'others', 'extinction_reason'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function species()
{
return $this->belongsTo('App\Species', 'id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function dinosaur()
{
return $this->hasOne('App\Dinosaur', 'id');
}
}
Класс собак:
class Dog extends Model
{
/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false;
/**
* @var array
*/
protected $fillable = ['name'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function animal()
{
return $this->belongsTo('App\Animal', 'id');
}
}
Класс динозавра:
класс Расширение класса динозавров Модель {/ ** * Указывает, являются ли идентификаторы автоматически увеличивающимися. * * @var bool * / publi c $ incrementing = false;
/**
* @var array
*/
protected $fillable = ['name'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function missingAnimal()
{
return $this->belongsTo('App\MissingAnimal', 'id');
}
}
Это хорошая практика, чтобы сделать это? Или лучше использовать методы morph ... на laravel.