Laravel-多态关系不起作用

时间:2019-03-21 20:12:24

标签: php laravel eloquent

所以我有以下代码:

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路由中有一个测试路由,用于检查列表是否正在加载,并且返回null :(是的,我已经验证了该部分本身)

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

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

我在PageSection的数据库模式中,entity_type指示模型是什么,而id_Entity是该模型的外键,在参考表上名为“ id”。

morphMap中定义的其他关系正常运行,但是由于某些原因,PageSection中的list()关系不起作用。我不确定我在做什么错..任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,所以我弄清楚了发生了什么。 Laravel的morphMap可能是一个错误。我在PageSection :: TYPE_CURATED常量中使用0,这是一个假值。当我切换到:

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。