2015-04-23 4 views
1

Я пытаюсь добиться наследования, используя полиморфные отношения в Eloquent ORM.Полиморфное отношение в Eloquent ORM (Lavarel)

Моя модель схема выглядит следующим образом:

class Section extends Model { 
    public function blocks() { // section has many blocks } 
} 
abstract class Block extends Model {..} 
class Exercise extends Block {..} 
class Info extends Block {..} 

Так что в моем случае секции имеет множество блоков (и каждый элемент может быть упражнение или Info).

Я пытался сказать, что красноречивые Section.blocks является hasMany отношение к Блок и Блок является morphedTo по его блокируемый отношение к упражнения или Info, но я не смог (и это также не похоже на правильный способ сделать это, потому что он создает одно дополнительное свойство, такое как $section->blocks[0]->blockable, которое должно быть $section->blocks[0]).

Я также попытался morphTo от Section.blocks сразу, но и не удалось.

Возможно, кто-то уже достиг этого и мог указать мне в правильном направлении.

ответ

0

Вопрос немного расплывчатый, но ваши модели должны быть как показано ниже. Если есть какая-либо разница, добавьте точные ошибки, которые вы получите, когда вы потерпите неудачу.

class Section extends Model { 
    public function blocks() { 
     return $this->morphTo(); 
    } 
} 

class Exercise extends Block { 
    public function sections() { 
     return $this->morphMany('App\Section', 'blocks'); 
    } 
} 

class Info extends Block { 
    public function sections() { 
     return $this->morphMany('App\Section', 'blocks'); 
    } 
} 
+0

Что я получаю от 'section-> relations-> blocks' ** null **. Вот как выглядит моя схема db: [db schema] (http://imgur.com/Mf0nDtj) – MyFantasy512

+0

И это мои модели: [код модели] (http://wklej.to/C5brR) – MyFantasy512

+0

Если у вас есть info и вы хотите получить раздел, тогда вы можете сделать это с помощью $ info-> sections –

Смежные вопросы