Laravel Eloquent多态一对一?

时间:2014-02-25 11:29:26

标签: laravel laravel-4 eloquent polymorphic-associations

我正在尝试建立一个多态一对一的关系(has_one和belongs_to的多态等价物)。我有一个Address模型,还有其他几个我希望拥有的模型一个地址。但是,我对文档的措辞感到困惑。我见过morphMany方法,但我的问题是:我应该使用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');
});

2 个答案:

答案 0 :(得分:24)

是的,有一个 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,效果非常好。

答案 1 :(得分:3)

尝试这个,我认为这比不支持的morphOne更好。

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