Laravel加入关注LIKE
问题描述:
$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
,但我没有得到任何价值。Laravel加入关注LIKE
答
释
我认为你的问题在于你如何条款join
工作。
如果classes.id
为(int)
型和exam_list.examClasses
是(array)
型或(json)
的,那么它是不可能的,你会得到摆在首位成功加盟。您可以通过删除where子句并查看是否得到任何结果来测试这一点。
解决方案
我建议改变你的classes
模型和exam_list
模型之间的雄辩关系是A许多与数据透视表或一个简单的一对多关系一对多的关系。
您需要自己决定哪些对您的项目最有意义!我强烈建议阅读关于雄辩关系的文档,以更好地理解在这种情况下他们将如何帮助您。
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');
}
随着这些变化(并提供你有你的模型之间的关系强劲),那么你可以用雄辩来获取信息你需要做这样的事情:
$exam_list = Exam_list::where('examAcYear',$this->panelInit->selectAcYear);
$collection = $exam_list->classes()->where('classTeacher', $this->data['users']->id)->get();
你能够p浏览你试图加入的两张表的结构?你是否也可以确认你的“课程”以及“exam_lists”的模型? – Spholt
是的,这个名字的模型已被定义。在表中,exams_list字段'examClasses'的值以数组格式存储,例如:[“1”,“2”,“3”]和其他表中的classes.id是表'classes' 。 – Cliffs