如何在加入请求中使用查询范围Laravel?
How to use query scope in join request 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:
您需要使用 ObjectTranslate 的 table 加入查询。您的 scopeLanguage() 函数将不起作用,因为您正在尝试访问对象模型列中不可用的列语言。
注意 : With() 只是预先加载,它将加载 eloquent 定义的函数,你不能直接访问它们在 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
我有以下要求:
$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:
您需要使用 ObjectTranslate 的 table 加入查询。您的 scopeLanguage() 函数将不起作用,因为您正在尝试访问对象模型列中不可用的列语言。
注意 : With() 只是预先加载,它将加载 eloquent 定义的函数,你不能直接访问它们在 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