gpt4 book ai didi

mysql - Laravel 5.4 原始连接查询

转载 作者:行者123 更新时间:2023-11-30 21:55:44 25 4
gpt4 key购买 nike

我有一个用于存储博客文章的表TBL_POST。一个帖子可以分配给多个类别,有一列 cat_id 以逗号分隔的模式存储类别 ID,如 2,4,6。我想在这一行中使用FIND_IN_SET()方法

->leftJoin(TBL_CAT.' as c', 'p.cat_id', '=', 'c.id')

显示关联的类别名称。我该怎么做?

public static function getPostWithJoin($status="")
{
$query = DB::table(TBL_POST .' as p')
->select('p.id','p.post_title','p.post_status','u.name as author','c.name as cat_name','p.updated_at')
->leftJoin(TBL_ADMINS.' as u', 'p.post_author', '=', 'u.id')
->leftJoin(TBL_CAT.' as c', 'p.cat_id', '=', 'c.id')
->where('p.post_type','post');
if($status!="all") {
$query->where('p.post_status',$status);
}

$query->orderby('p.id','DESC');
$data = $query->paginate(20);

return $data;
}

最佳答案

您可以使用回调来创建更复杂的连接查询。

->leftJoin(TBL_CAT, function($query){
$query->on(TBL_CAT.'id', '=', 'p.cat_id')->where("**", "**", "**");
})

这是 laravel 文档上的链接 - https://laravel.com/docs/5.4/queries#joins “高级连接子句”部分。

更新::如评论中所述,为此类数据设置字符串并不是一个好主意。因为相等搜索应该比字符串检查简单得多。即使您的数据量应该没有太大差异,您也永远不知道您的应用程序将来会发生什么。

但如果你仍然想这样做,我认为你可以这样尝试

->leftJoin(TBL_CAT, function($query){
$query->where(DB::raw("FIND_IN_SET(".TBL_CAT.".id, p.cat_id)"), "<>", "0");
})

加入将检查 cat_id 中是否存在 id。

关于mysql - Laravel 5.4 原始连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com