多形の1対1の関係(has_oneとbelongs_toの多形に相当するもの)を設定しようとしています。Address
モデルがあり、1つのアドレスが必要な他のモデルがいくつかあります。 。しかし、私はドキュメントの言い回しに混乱しています。 morphMany
メソッドを見たことがありますが、私の質問は、アドレスを1つだけにしたいのに、morphMany
を使用する必要があるのか、それともmorphOne
のようなものがあるのかということです。私が使用すべき方法は?
編集:私のAddress
モデルには、視覚化に役立つように、次のフィールドがあります。
Schema::create('addresses', function ($table)
{
$table->increments('id');
$table->string('street');
$table->string('street_more')->nullable();
$table->string('city');
$table->string('state')->nullable();
$table->string('country');
$table->string('postal_code');
$table->integer('addressable_id');
$table->string('addressable_type');
});
はい、morphOneメソッドがあり、この場合に使用する必要があると思います: https://github.com/ laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L811 。
また、あなたは使用することができます
$table->morphs('addressable');
の代わりに
$table->integer('addressable_id');
$table->string('addressable_type');
L4のカスタムパッケージでmorphOneを使用しましたが、かなりうまく機能します。
これを試してみてください。サポートされていないmorphOneよりも優れていると思います。
public function address()
{
return $this->hasOne('App\Address', 'addressable_id','id')
->where('addressable_type', 'App\Model');
}