Laravel хорошая практика для создания базы данных - PullRequest
0 голосов
/ 05 апреля 2020

Мне нужна помощь, чтобы правильно спроектировать мою базу данных. Я работаю с 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...