gpt4 book ai didi

php - Eloquent ORM - 模型关系

转载 作者:行者123 更新时间:2023-11-30 22:38:06 24 4
gpt4 key购买 nike

我对 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');
}
}

我想了解/使用数组关系,这样我就可以在一个查询中执行以下操作。我知道我可以进行多个查询:

查询 1:

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

然后查询 2:

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

我是在 SO 上看到这篇文章的处理同样的问题。我尝试在程序模型中添加 $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 = [];

非常感谢!

最佳答案

定义类 UserAccount

定义类游戏

一个 UserAccount 可以有超过 1 个游戏。

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

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

引用:

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

关于php - Eloquent ORM - 模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31856010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com