2016-09-27 55 views
1

我有以下要求:如何在加入請求Laravel中使用查詢範圍?

$objects = Object::with("translate")->where(function ($query) use ($request) { 
$query->language(); 

})->with('images')->with("category")->orderBy('id', 'desc')->paginate($limit); 

所以,在模型Object有方法:translate

public function translate() 
{ 
    return $this->hasMany("App\ObjectTranslate", "objectId", "id"); 
} 

所以,也在這種模式是:

public function scopeLanguage($query) 
    { 
     $languageHeader = new ModelLibrary(); 

     return $query->where('language', '=', $languageHeader->getLanguage()); 
    } 

當我嘗試在主要請求中調用示波器:

$query->language(); 

我收到SQL錯誤:

Column not found: 1054 Unknown column 'language' in 'where clause' (SQL: 
+0

列語言是存在在你的對象模型的表 – Vikash

+0

沒有,列'language'是模型'ObjectTranslate' – Babaev

回答

0

你需要加入與ObjectTranslate的表的查詢。你的scopeLanguage()函數將不起作用,因爲你試圖訪問在Object model列中不可用的列語言。

注意:With()將只是急於加載,這將加載雄辯定義的函數,您不能直接訪問它們的where子句中的列。

修改您的scopeLanguage功能

public function scopeLanguage($query) 
{ 
    $languageHeader = new ModelLibrary(); 

    return $query->join('object_translate_table','object_translate_table.objectId','=','object_table.id')->where('object_translate_table.language',$languageHeader->getLanguage()); 

} 

$objects = Object::with("translate","images","category") 
        ->language() 
        ->orderBy('id', 'desc') 
        ->paginate($limit); 

這應該工作

Assumin ObjectTranslate model's table name is object_translate_table and Object model's table name is object_table

+0

我需要使用Closure,你的答案很有用,但是我能做什麼呢? – Babaev

+0

等一下。我再次更新,只是給我幾分鐘 – Vikash

+0

檢查更新的代碼,應該工作,如果發生任何問題,然後讓我知道 – Vikash