php - 下面这段sql如何用laravel表示呢?
高洛峰
高洛峰 2017-04-11 09:23:54
[PHP讨论组]
select temp.* FROM 
(select uc.circle_id, cas.id as statistic_id, cas.created_at FROM circle JOIN user_circle as uc ON circle.id = uc.circle_id 
LEFT JOIN circle_activity_statistics as cas ON uc.circle_id = cas.circle_id WHERE circle.type != 0 and 
uc.user_id = 39471 )
 as temp 
WHERE DATE_FORMAT(created_at,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') OR ISNULL(created_at);

不希望用这种方式:

$query = DB::select("select temp.* FROM (select uc.circle_id, cas.id as statistic_id, cas.created_at FROM circle 
            JOIN user_circle as uc ON circle.id = uc.circle_id 
            LEFT JOIN circle_activity_statistics as cas ON uc.circle_id = cas.circle_id WHERE circle.type != 0 and uc.user_id = 39471 ) as temp 
            WHERE DATE_FORMAT(created_at,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') OR ISNULL(created_at)");
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
PHP中文网

我的原则是,普通的单表sql用ORM,不仅省事,而且带来很多的ORM对象的方法可以使用。但是以上如此复杂的SQL还是建议原生,你用ORM也不好组织,而且一旦有些变动,改起来也费劲

怪我咯

个人喜欢用原生的,不喜欢ORM。其实原生SQL就很好了。

巴扎黑

这个sql太多内容如果用orm你会发现代码并不是很简洁,连缀一大堆,调试起来特别麻烦,这么长的sql,我一般直接写原生。

黄舟

子查询中有左链接,我觉得你要优化写法,不要这样一条sql去处理比较好

用laravel就推荐使用ORM,左联接可以用关联关系去实现。

迷茫

上面写的有点问题不需要isnull('created_at'),最终如下:

public function getCircleStatisticInfo()
    {
        $userId = $this->uid;
        $now = DateUtil::now()->format(DateUtil::dayFormat);
        return UserCircle::join('circle', function ($join) use ($userId) {
            $join->on('circle.id', '=', 'user_circle.circle_id')->where('user_circle.user_id', '=', $userId)->where('circle.type', '<>', Circle::CIRCLE_TYPE_DELETE);
        })->leftJoin('circle_statistics as cs', function ($join) use ($now) {
            $join->on('user_circle.circle_id', '=', 'cs.circle_id')->where('cs.statistic_at', '=', $now);
        })->select('user_circle.circle_id', 'cs.id as statistic_id')
          ->get();
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号