按 category_id 和语言环境 laravel 查询
Query by category_id and locale in laravel
我需要根据请求
查询所有文章 cateogry_id 和语言环境
示例:category_id 为 2 且区域设置为“en”的所有文章
articles
id
language
article_category
article_id
category_id
categories
id
name
我试过的
private function filterArticleByCategory(&$query, $category_id) {
if (!is_null($category_id)) {
$query = $query->whereIn('articles.id', Article::select('article_id')->from('article_category')->where('category_id', $category_id ));
}
}
private function filterArticleByLanguage(&$query, $lang) {
if(!is_null($lang)) {
// $array = explode(' ', $lang);
#arreyVal = array_values($array)[0]
$query = $query->where('language', $lang);
}
}
您可以直接在您的控制器方法中创建一个方法:
class ArticleController {
// ...
public function getByCategoryAndLanguage(int $categoryId, string $language) {
return Article::join('article_category', 'article.id', '=', 'article_category.article_id')
->where('category_id', '=', $categoryId)
->where('language', '=', $language)
->get();
}
}
如果您需要在您的 Article
模型上直接使用这些过滤器,您可能需要使用 local scopes,尽管对于如此简单的 where 条件来说它可能是多余和多余的:
class Article extends Model {
// ...
public function scopeInCategory($query, int $categoryId) {
return $query->join('article_category', 'article.id', '=', 'article_category.article_id')
->where('category_id', '=', $categoryId);
}
public function scopeInLanguage($query, string $language) {
return $query->where('language', '=', $language);
}
}
然后在你的控制器中:
class ArticleController {
// ...
public function getByCategoryAndLanguage(int $categoryId, string $language) {
return Article::inCategory($categoryId)
->inLanguage($language)
->get();
}
}
在您发表评论后进行编辑:
然后你可以在你的控制器上有两个不同的方法——每个过滤器一个——很容易:
class ArticleController {
// ...
public function getByCategory(int $categoryId) {
return Article::join('article_category', 'article.id', '=', 'article_category.article_id')
->where('category_id', '=', $categoryId)
->get();
}
public function getByLanguage(string $language) {
return Article::where('language', '=', $language)->get();
}
}
我需要根据请求
查询所有文章 cateogry_id 和语言环境示例:category_id 为 2 且区域设置为“en”的所有文章
articles
id
language
article_category
article_id
category_id
categories
id
name
我试过的
private function filterArticleByCategory(&$query, $category_id) {
if (!is_null($category_id)) {
$query = $query->whereIn('articles.id', Article::select('article_id')->from('article_category')->where('category_id', $category_id ));
}
}
private function filterArticleByLanguage(&$query, $lang) {
if(!is_null($lang)) {
// $array = explode(' ', $lang);
#arreyVal = array_values($array)[0]
$query = $query->where('language', $lang);
}
}
您可以直接在您的控制器方法中创建一个方法:
class ArticleController {
// ...
public function getByCategoryAndLanguage(int $categoryId, string $language) {
return Article::join('article_category', 'article.id', '=', 'article_category.article_id')
->where('category_id', '=', $categoryId)
->where('language', '=', $language)
->get();
}
}
如果您需要在您的 Article
模型上直接使用这些过滤器,您可能需要使用 local scopes,尽管对于如此简单的 where 条件来说它可能是多余和多余的:
class Article extends Model {
// ...
public function scopeInCategory($query, int $categoryId) {
return $query->join('article_category', 'article.id', '=', 'article_category.article_id')
->where('category_id', '=', $categoryId);
}
public function scopeInLanguage($query, string $language) {
return $query->where('language', '=', $language);
}
}
然后在你的控制器中:
class ArticleController {
// ...
public function getByCategoryAndLanguage(int $categoryId, string $language) {
return Article::inCategory($categoryId)
->inLanguage($language)
->get();
}
}
在您发表评论后进行编辑:
然后你可以在你的控制器上有两个不同的方法——每个过滤器一个——很容易:
class ArticleController {
// ...
public function getByCategory(int $categoryId) {
return Article::join('article_category', 'article.id', '=', 'article_category.article_id')
->where('category_id', '=', $categoryId)
->get();
}
public function getByLanguage(string $language) {
return Article::where('language', '=', $language)->get();
}
}