$toReturn['exams'] = exams_list::where('examAcYear',$this->panelInit->selectAcYear)
->join('classes', 'exams_list.examClasses', '=', 'classes.id')
->where('classes.classTeacher', 'LIKE', '%'.$this->data['users']->id.'%')
->select('classes.*','exams_list.exam_name')
->get()
->toArray();
此查询是否正确?我必须加入2个表classes
和exams_list
,但我没有得到任何值。
答案 0 :(得分:0)
<强>释强>
我认为您的问题在于join
条款的运作方式。
如果classes.id
的类型为(int)
且exam_list.examClasses
的类型为(array)
或(json)
,则您不太可能成功加入第一名。你可以通过删除where子句并查看是否得到任何结果来测试它。
<强>解决方案强>
我建议将您的classes
模型和exam_list
模型之间的雄辩关系更改为与数据透视表或简单的一对多关系的多对多关系。
您需要自己决定哪个项目对您的项目最有意义!我强烈建议阅读有关雄辩关系的文档,以便更好地了解它们在这种情况下如何帮助您。
https://laravel.com/docs/5.4/eloquent-relationships
示例强>
以下是您可能使用的多对多关系的示例:
<强>模型/ Classes.php 强>
/**
* A class belongs to many exam lists
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function examLists()
{
return $this->belongsToMany(Exam_list::class, 'classes_exam_lists');
}
<强>模型/ Exam_list.php 强>
/**
* A exam list has many classes
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function classes()
{
return $this->belongsToMany(Classes::class, 'classes_exam_lists');
}
<强>移植强>
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('classes_exam_lists', function (Blueprint $table) {
$table->integer('class_id')->unsigned()->index();
$table->foreign('class_id')->references('id')->on('classes')->onDelete('cascade');
$table->integer('exam_list_id')->unsigned()->index();
$table->foreign('exam_list_id')->references('id')->on('exam_lists')->onDelete('cascade');
$table->primary(['class_id', 'exam_list_id']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('classes_exam_lists');
}
通过这些更改(并为您提供模型之间的稳固关系),您可以使用eloquent通过执行以下操作获取所需信息:
$exam_list = Exam_list::where('examAcYear',$this->panelInit->selectAcYear);
$collection = $exam_list->classes()->where('classTeacher', $this->data['users']->id)->get();