Laravel Красноречивый полиморфный один к одному?
Я пытаюсь установить полиморфное отношение "один-к-одному" (полиморфный эквивалент has_one и принадлежит_to). У меня есть модель Address
, и есть несколько других моделей, в которых я хочу иметь один адрес, Однако меня смущает формулировка документов. Я видел метод morphMany
, но мой вопрос: следует ли использовать morphMany
, хотя я хочу, чтобы у него был только один адрес, или есть что-то вроде метода morphOne
, который я должен использовать?
EDIT: моя модель 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');
});
Ответы
Ответ 1
Да, есть метод 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 и работает очень хорошо.
Ответ 2
Попробуйте это, я думаю, что это лучше, чем morphOne, который не поддерживается.
public function address()
{
return $this->hasOne('App\Address', 'addressable_id','id')
->where('addressable_type', 'App\Model');
}