Laravel Eloquent полиморфен один к одному?
-
21-12-2019 - |
Вопрос
Я пытаюсь установить полиморфное отношение «один к одному» (полиморфный эквивалент 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');
}