Вопрос

Я пытаюсь установить полиморфное отношение «один к одному» (полиморфный эквивалент has_one и own_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');
});
Это было полезно?

Решение

Да, есть 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');

Я использовал morphOne в специальном пакете для L4, и он работает очень хорошо.

Другие советы

Попробуйте этот, я думаю, это лучше, чем morphOne, который не поддерживается.

  public function address()
  {
      return $this->hasOne('App\Address', 'addressable_id','id')
                   ->where('addressable_type', 'App\Model');
  }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top