2017-03-07 44 views
1
$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

回答

0


我認爲你的問題在於你如何條款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();