2016-09-27 27 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