说明
我认为您的问题在于您的 join 子句的工作方式。
如果classes.id 的类型为(int),而exam_list.examClasses 的类型为(array) 或(json),那么您一开始就不太可能成功加入。您可以通过删除 where 子句并查看是否得到任何结果来对此进行测试。
解决方案
我建议将您的 classes 模型和 exam_list 模型之间的雄辩关系更改为与数据透视表的多对多关系或简单的一对多关系。
您需要自己决定哪个对您的项目最有意义!我强烈建议您阅读有关 eloquent 关系的文档,以更好地了解它们在这种情况下将如何帮助您。
https://laravel.com/docs/5.4/eloquent-relationships
示例
以下是您可能使用的多对多关系示例:
模型/类.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();