Laravel 5.2查询查找表中使用的标记/字符串的次数

时间:2017-02-05 23:20:14

标签: laravel laravel-5.2

我有两张桌子。 1篇文章表和1个标签表。我需要找出文章表中所有文章中使用标记的次数。 目前我正在使用以下代码来获取它。但它的过程较慢。有没有更好的方法或laravel查询,以使其更快?

    $tags = Tag::get();

    $array = array();

    foreach($tags as $tag){
        $articles = count(Article::where('public', '1')->where('tags', 'rlike', $tag->tag)->get());
        if ($articles > 0) {
            $array[] = array(
                    $tag->tag => $articles
                );
        }
    }

    return json_encode($aaa);

2 个答案:

答案 0 :(得分:1)

嗯,问题是你有一个多对多的关系,但是没有规范化的表。我建议您调整数据库表格,因为这样您就可以$tag->articles()->count()获取使用特定$tag的文章数量,而无需加载项目。

一个伟大的结构将是:

articles (Table for your articles)

id
public
...

tags (Tag data table)

id
name
...

articles_tags (Pivot table)

article_id
tag_id

关于多对多关系的文件中还有一个great chapter

答案 1 :(得分:0)

你可以按照@manniL的建议重新安排你的关系,或者只是做一个非常快的原始查询:

$result = DB::table('tags')
->leftjoin('articles', 'articles.tags', 'rlike', 'tags.name')
->selectRaw('tags.name, count(articles.id) as total')
->groupBy('tags.name')
->get();

这将返回类似

的内容
[
    {'name': 'tag1', 'total': 3},
    {'name': 'tag2', 'total': 2},
    {'name': 'tag3', 'total': 7}
]

希望这有助于任何人。