2015-06-25 3 views
0

Я работаю над проектом электронного обучения и хочу построить масштабируемые отношения между таблицами, но зацикленный на том, как сопоставить их, используя красноречивые отношения. У меня есть 5 таблицаlaravel 5: масштабируемое соотношение между более чем 4 таблицами

1. boards : id, name(field names) 
2. standards: id, board_id, name 
3. subjects: id, board_id, standard_id, name 
4. chapters: id, board_id, standard_id, subject_id , name 
5. questionTypes: id, type(like MCQ, T/F, Fill in the blanks) 
6. questions: id,board_id, standard_id, subject_id, chapter_id, question_type_id, question 

Описания о структуре

  • доска представляет исследование доска означает состояние доску и все
  • стандарты представляют пример класса: первые вторые и т.д.
  • предметов например math, science и т. д.
  • главы являются как номер системы математического предмета
  • question_types представляет тип вопроса в этом проекте у меня есть 3 типа вопроса, но она может быть более
  • вопросы таблица содержит все вопросы главы в зависимости от board, standard, subject.

Я использую Laravel 5 и я Newbee в красноречивых отношениях

ответ

0

Вам нужно создать модели для каждой таблицы: php artisan make:model Board

Примечания: Laravel знает множественное число модели поэтому Model Board становится настольной. Это также работает для таких слов, как: Копирование/копии и т. Д.

Artisan также создает файл миграции для каждой создаваемой модели.

В этой миграции вам необходимо определить внешние ключи.

Schema::create('boards', function(Blueprint $table) 
     { 
      $table->increments('id'); 
      $table->timestamps(); 
     }); 


Schema::create('standards', function(Blueprint $table) 
     { 
      $table->increments('id'); 
      $table->integer('board_id')->unsigned(); 
      $table->timestamps(); 

      $table->foreign('board_id')->references('id')->on('boards')->onDelete('cascade'); 
     }); 

Schema::create('subjects', function(Blueprint $table) 
     { 
      $table->increments('id'); 
      $table->integer('board_id')->unsigned(); 
      $table->integer('standard_id')->unsigned(); 
      $table->timestamps(); 

      $table->foreign('board_id')->references('id')->on('boards')->onDelete('cascade'); 
      $table->foreign('standard_id')->references('id')->on('subjects')->onDelete('cascade'); 
     }); 

и т.д ...

И в каждом файле модели, можно определить зависимость:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Board extends Model { 

    protected $fillable = []; 

    public function standards() 
    { 
     return $this->hasMany('App\Standard'); 
    } 

    public function subjects() 
    { 
     return $this->hasMany('App\Subject'); 
    } 


    ... 


} 

И в других моделях:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Standard extends Model { 

    protected $fillable = []; 

    public function board() 
    { 
     return $this->belongsTo('App\Board'); 
    } 


} 


<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Subject extends Model { 

    protected $fillable = []; 

    public function board() 
    { 
     return $this->belongsTo('App\Board'); 
    } 

    public function standard() 
    { 
     return $this->belongsTo('App\Standard'); 
    } 

    ... 


} 

Теперь в Laravel , вы можете сделать что-то вроде:

Board::find(1)->subjects или Subject::find(4)->board

Надеюсь, это поможет!

+0

ну, я получил основную идею для отношений, но Стандарт может иметь много плат, таких как 1-й стандарт может быть любой доски , и тема может иметь много стандартов и досок, то же самое для глав и вопросов. так что я должен использовать hasMany() relationsip в стандарте, теме, главе и вопросе для доски? – Rahul

+0

О, я неправильно понял. Что касается структуры вашей базы данных, вам придется потратить некоторое время, чтобы понять, как вы хотите использовать данные. Это не тривиально, и есть не один правильный ответ. Один из них вы решаете, тогда вы будете знать, как настроить его без проблем.Например, я думаю, что я буду подвергать себя модели самого высокого уровня вместо платы. Затем Subject имеет много досок, но доска принадлежит одному предмету (если это так). –

+0

Почему вы думаете, что тема должна быть моделью самого высокого уровня? На плате может быть много предметов, и у субъекта может быть много досок. и существует модель более высокого уровня, чем объект, например, стандарт. – Rahul

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