Согласно этой проблеме , при использовании имени пользовательского метода для определения отношения полиморф c в Laravel аргумент имени метода morphTo
не работает должным образом. Предположим, что простая полиморфная c структура таблицы:
posts
id - integer
name - string
users
id - integer
name - string
images
id - integer
url - string
imageable_id - integer
imageable_type - string
и структура этой модели:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
// ...
// It doesn't work as expected
public function picturable1()
{
return $this->morphTo('imageable');
}
// It doesn't work as expected
public function picturable2()
{
return $this->morphTo('imageable', 'imageable_type', 'imageable_id');
}
// It works unexpectedly
public function picturable3()
{
return $this->morphTo(null, 'imageable_type', 'imageable_id');
}
}
При загрузке этих отношений:
$image = \App\Image::with('picturable1')->find(1);
$image->picturable1; // exists and returns null but imageable instance was expected
$image->imageable; // returns imageable instance unexpectedly
$image = \App\Image::with('picturable2')->find(1);
$image->picturable2; // exists and returns null but imageable instance was expected
$image->imageable; // returns imageable instance unexpectedly
$image = \App\Image::with('picturable3')->find(1);
$image->picturable3; // returns imageable instance as expected
$image->imageable; // doesn't exists as expected
Итак, вопросы , Каков вариант использования аргумента name метода morphTo
? и как правильно настроить имя отношения, как в примере выше?