Laravel使用LIKE加入查询

时间:2017-03-07 09:16:11

标签: php laravel join eloquent

$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,但我没有得到任何值。

1 个答案:

答案 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();