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个表classesexams_list,但我没有得到任何价值。Laravel加入关注LIKE

+0

你能够p浏览你试图加入的两张表的结构?你是否也可以确认你的“课程”以及“exam_lists”的模型? – Spholt

+0

是的,这个名字的模型已被定义。在表中,exams_list字段'examClasses'的值以数组格式存储,例如:[“1”,“2”,“3”]和其他表中的classes.id是表'classes' 。 – Cliffs


我认为你的问题在于你如何条款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();