php - 如何优化具有外键的 Eloquent 查询

标签 php mysql laravel eloquent

我有两个表 Tags 和 Admin ,我的标签表如下所示:

enter image description here

我的管理表如下所示:

enter image description here

admin表中的tag字段是一个外键,它引用了tags表中的ID。我想要做的是,使用特定的 tag 提取管理表中的记录, 现在当然是 tag在管理表中引用 idtags table 。

所以我编写了以下查询以从管理表中检索具有特定标签(例如 Javascript)的文章。

public function showTagListing($tag) {
        $tagId = DB::table('tags')->where('tag', $tag)->first();
        $tagBlogList = DB::table('admin')->where('tag', $tagId->id )->orderBy('created_at' , 'desc')->get();
        return view('pages.taglisting', compact('tagBlogList', $tagBlogList));
    }

我想我在这里多写了一些不需要的代码行来检索文章记录,我怎样才能把代码写成一行?我如何优化这些代码行?

最佳答案

public function showTagListing($tag)
{
    $tagBlogList = DB::table('admin')
        ->join('tags', 'tags.id', '=', 'admin.tag')
        ->where('tags.tag', $tag)
        ->latest()
        ->select('admin.*')
        ->get();

    return view('pages.taglisting', compact('tagBlogList'));
}

如果你想走 Eloquent 之路,那么你可以这样做。创建具有关系的适当模型。

public function showTagListing($tag)
{
    $tagBlogList = Admin::whereHas('tags', function ($query) use($tag) {
            $query->where('tag', $tag);
        })
        ->latest()
        ->get();

    return view('pages.taglisting', compact('tagBlogList'));
}

关于php - 如何优化具有外键的 Eloquent 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44357455/

相关文章:

mysql - 如何确定是否可以从 impressions 表中删除某些索引

php - 将购物车项目存储到 cookie 和数据库中

php - 在 Laravel 邮件中设置主题变量

laravel - 如何使用 Laravel Migrations 转换外键中的现有列

javascript - PHP-从数据库获取实时数据

php - 如何在没有类的情况下通过 artisan 命令制作组件?

php - 如何使用 time() 来计算您登录的秒数

php - 未创建文件 (Linux-PHP-C++)

Mysql 仅连接特定行

php - 使用 Homestead 在 Laravel 中使用 Redis 队列