web-dev-qa-db-ja.com

Laravel Eloquent polymorphic 1対1?

多形の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');
});
20
BenjaminRH

はい、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を使用しましたが、かなりうまく機能します。

24
marcanuy

これを試してみてください。サポートされていないmorphOneよりも優れていると思います。

  public function address()
  {
      return $this->hasOne('App\Address', 'addressable_id','id')
                   ->where('addressable_type', 'App\Model');
  }
3
Andrew