Laravel - Полиморфные отношения не работают - PullRequest
0 голосов
/ 21 марта 2019

Итак, у меня есть следующий код:

class PageSection extends Model {
    protected $table = "PageSection";

    const TYPE_CURATED = 0;
    const TYPE_AUTOMATED = 1;

    public function list() {
        return $this->morphTo('list', 'entity_type', 'id_Entity');
    }
}

тогда в AppServiceProvider.php у меня есть следующее:

use App\PageSection;
use App\PageSectionGroup;
use App\PageListEntry;
use App\RSSFeed;
use App\Shortcut;
use App\RSSEpisode;
use App\PageList;
use App\AutomatedList;


class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        Relation::morphMap([
            'Section'                    => PageSection::class,  
            'SectionGroup'               => PageSectionGroup::class,
            PageSection::TYPE_CURATED    => PageList::class,
            PageSection::TYPE_AUTOMATED  => AutomatedList::class,
            PageListEntry::TYPE_FEED     => RSSFeed::class,
            PageListEntry::TYPE_SHORTCUT => Shortcut::class,
            PageListEntry::TYPE_EPISODE  => RSSEpisode::class
        ]);

    }

Тогда у меня есть тестовый маршрут в моих маршрутах API, который проверяет, загружается ли список, и возвращает ноль: (Да, я проверил, что сам раздел существует)

Route::get('/test', function() {
    $section = PageSection::with(['list', 'type'])->find(1);

    // this returns null
    return $section->list;
});

Моя схема базы данных для PageSection такова, что entity_type сообщает, что это за модель, а id_Entity - это внешний ключ для этой модели, который называется «id» в ссылочной таблице.

Другие отношения, определенные в morphMap, работают должным образом, но по какой-то причине отношение list () в PageSection - нет. Я не уверен, что я делаю не так здесь ... любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 марта 2019

Хорошо, так что я понял, что происходит.Это, вероятно, ошибка в morphMap от Laravel.Я использовал 0 для константы PageSection :: TYPE_CURATED, которая является значением Фолси.Когда я переключился на:

Relation::morphMap([
    'PageList'                   => PageList::class,
    'AutomatedList'              => AutomatedList::class,
    'Section'                    => PageSection::class,  
    'SectionGroup'               => PageSectionGroup::class,
    PageListEntry::TYPE_FEED     => RSSFeed::class,
    PageListEntry::TYPE_SHORTCUT => Shortcut::class,
    PageListEntry::TYPE_EPISODE  => RSSEpisode::class
]);

, все работало нормально.Похоже, что Laravel не нравится значение 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...