所以我有以下代码:
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()关系不起作用。我不确定我在做什么错..任何帮助将不胜感激。
答案 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。