#php #laravel #eloquent
#php #laravel #красноречивый
Вопрос:
Итак, у меня есть следующий код:
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 AppPageSection;
use AppPageSectionGroup;
use AppPageListEntry;
use AppRSSFeed;
use AppShortcut;
use AppRSSEpisode;
use AppPageList;
use AppAutomatedList;
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 routes, который проверяет, загружается ли список, и возвращает 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, работают должным образом, но по какой-то причине связь list() в PageSection — нет. Я не уверен, что я здесь делаю не так .. буду признателен за любую помощь.
Ответ №1:
Хорошо, итак, я разобрался, что происходит. Вероятно, это ошибка с 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.