我有以下要求:
$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 :(得分:0)
您需要使用ObjectTranslate的表加入查询。您的scopeLanguage()函数将无法工作,因为您正在尝试访问对象模型列中不可用的列语言。
注意:用()只会急切加载,这会加载雄辩定义的函数,你不能直接在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模型的表名是object_translate_table,对象模型的表名是object_table