Eloquent ORM — Модели отношений

Я довольно новичок в OctoberCMS / Lavarel ORM и я как бы застрял в реализации моделей отношений. У меня есть две таблицы базы данных / модели, где одна представляет общую информацию о программах A, B, C и вторая общая информация о различных уровнях, связанных с этими программами.

Задача : Я хотел бы получить информацию для определенной программы X + получить всю информацию для уровней программы, связанных с ним.

модели

Модель 1 — Схема таблицы

    Schema::create('pgs_programs', function($table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->char('prog_code', 10); // Unique ID/SKU
$table->string("prog_slug" )->nullable();
$table->string("prog_title")->nullable();
$table->text("prog_intro_title")->nullable();
$table->text("prog_intro")->nullable();
$table->text("prog_top_img" )->nullable();
$table->timestamps();
});

Модель 2 — Схема таблицы

    Schema::create('pgs_program_levels', function($table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->char('prog_code', 10); // Related to Parent Program ID/SKU
$table->string('level_title')->nullable();
$table->enum('prog_level', array(4,5,6,7))->nullable();
$table->text('prog_duration')->nullable();
$table->text("prog_desc")->nullable();
$table->text("prog_assesments" )->nullable();
$table->timestamps();
});

Составная часть

namespace PGS\Program\Components;
use Cms\Classes\ComponentBase;
use PGS\Program\Models\Program;  // Model 1
use PGS\Program\Models\ProgramLevels; // Model 2

public function onRun(){

$Programmes = Program::all();
$X = $this->param('programme');
$Y = $this->param('disciplines');
$slug = $X."/".$Y ;
$arr = array();

foreach($Programmes as $k){
$arr[]= $k['prog_slug'];
}
if(in_array($slug, $arr) ){
// here query both models
// this query gets General info from table1
$progInfo = Program::where('prog_slug', '=', $slug)->first();
} else {
return $this->controller->run('404');
}
}

Я хотел бы понять / использовать array Relations поэтому я могу сделать следующее в одном запросе. Я знаю, что могу сделать несколько запросов:

Запрос 1:

 $progInfo = Program::where('prog_slug', '=', $slug)->first();

тогда запрос 2:

 $progLvlsInfo = ProgramLevels::where('prog_code', '=', $progInfo['prog_code'])->get();
// returns array of all program levels

Я наткнулся на этот пост на ТАК это относится к этой же проблеме. Я пытался добавить $belongTo в модели программы и наоборот, но не имели успеха ..

 public $belongsTo = [
'program' =>       ['PGS\Program\Models\ProgramLevels',
'foreignKey' => 'prog_code']
];

Должен ли я придерживаться двух запросов, как указано выше, или использовать операторы Join, или использовать отношения, представленные в модели …

public $hasOne = [];
public $hasMany = [];
public $belongsTo = [];
public $belongsToMany = [];
public $morphTo = [];
public $morphOne = [];
public $morphMany = [];
public $attachOne = [];
public $attachMany = [];

Большое спасибо!

1

Решение

Определить класс UserAccount

Определить класс игры

У учетной записи пользователя может быть более 1 игры.

//UserAccount
function games() {
return $this->hasMany('Games', 'user_id');
}

UserAccount::find(1)->games();

Ссылка:

http://laravel.com/docs/5.0/eloquent#querying-relations

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]