我有两个表 Tags 和 Admin ,我的标签表如下所示:
我的管理表如下所示:
admin表中的tag字段是一个外键,它引用了tags表中的ID。我想要做的是,使用特定的 tag
提取管理表中的记录, 现在当然是 tag
在管理表中引用 id
在tags
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/