2015-12-02 142 views
0

我知道下面的錯誤是來自,但我不知道如何解決它。Laravel關係搜索功能

錯誤:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'expenses.date' in 'where clause' (SQL: select count(*) as aggregate from expenses_sections where expenses . date LIKE %2015-12%)

是什麼原因造成它(在我的控制器):

if($view === 'section') { 
    $query = Section::query(); 
     $query->with(['expenses' => function($query) use ($search){ 
      $query->where('date', 'LIKE', '%2015-' . $search . '%')->get(); 
     }]); 
} 

我有我用它來改變頁面佈局的選擇菜單。我有另一個選擇菜單,我只用來顯示某個月的結果。上面的錯誤是我在選擇一個月時得到的,因爲查詢在錯誤的表格中查找(因爲上面的代碼)。結果使用費用和部分之間的關​​系顯示。我想基本上是尋找在expenses表的結果,而不是expenses_sections表着,當然不打破關係,因爲基於關係,正在顯示我的佈局。

費用型號:

class Expense extends Model 
{ 
    public function section() 
    { 
     return $this->belongsTo('App\Http\Models\Expenses\Section'); 
    } 
} 

科型號:

class Section extends Model 
{ 
    public function expenses() 
    { 
     return $this->hasMany('App\Http\Models\Expenses\Expense'); 
    } 
} 
+0

'expense'是否有'date'字段? –

+0

如果您有已經expenses_id和SECTION_ID expenses_sections,你應該使用hasManyThrough(),但我總是很難得到這些工作的第一次如此,而不是我試圖回答這個問題,有這樣的以待更好的答辯讀:HTTP: //laravel.com/docs/5.1/eloquent-relationships#has-many-through – markdwhite

+0

真棒,這是更好地ofcourse讀它自己,而不是得到一個答案,我可以立即使用的,所以我感謝你! :) – Hardist

回答

1

查詢的限制應始終返回查詢生成器實例。你不應該你封中調用get所以儘量像這樣固定的:

$query = Section::query(); 
$query->with(['expenses' => function($query) use ($search) { 
    $query->where('date', 'LIKE', '%2015-' . $search . '%'); 
}]); 

這將獲取所有部分,並渴望負荷的關係。不符合約束條件的只會有一個空的expenses關係。如果你只是想適合約束的部分,那麼你應該使用whereHas方法。

$query = Section::query(); 
$query->with('expenses')->whereHas('expenses', function($query) use ($search) { 
    $query->where('date', 'LIKE', '%2015-' . $search . '%'); 
}); 
+0

謝謝您的回答。我發現這個錯誤是在別的地方,所以我在嘗試使用你的答案後自己修復了這個錯誤。儘管如此,仍將此標記爲已接受 – Hardist