Laravel query builder 使用子查询
需求1:
SELECT COUNT(*) FROM
(SELECT * FROM abc GROUP BY col1) AS a;
执行代码
$sub = Abc::where(..)->groupBy(..); // Eloquent Builder instance
$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
->mergeBindings($sub->getQuery()) // you need to get underlying Query Builder
->count();
需求2: 执行如下代码
SELECT
`p`.`id`,
`p`.`name`,
`p`.`img`,
`p`.`safe_name`,
`p`.`sku`,
`p`.`productstatusid`
FROM `products` p
WHERE `p`.`id` IN (
SELECT
`product_id`
FROM `product_category`
WHERE `category_id` IN ('223', '15')
)
AND `p`.`active`=1
实现:
Products::whereIn('id', function($query){
$query->select('paper_type_id')
->from(with(new ProductCategory)->getTable())
->whereIn('category_id', ['223', '15'])
->where('active', 1);
})->get();
综合运用:
$query = \DB::table('message')
->where(function ($query) use ($userId) {
$query->where([
['receiver_id', '=', "$userId"],
['type', '=', Messages::PRIVATE_MESSAGE],
]);
});
if (!empty($groupIds)) {
$query->orWhere(function ($queryq) use ($groupIds) {
$queryq
->where([
['type', '=', Messages::GROUP_MESSAGE],
['message.created_at', '>', \Auth::user()->created_at]
])
->whereIn('receiver_id', $groupIds);
});
}
/* 获取广播 */
$query->orWhere(function ($query) {
$query
->where([
['type', '=', Messages::BROADCAST_MESSAGE],
['dead_line', '>', Carbon::createFromTimestamp(time())],
['message.created_at', '>', \Auth::user()->created_at]
]);
});
$query->leftJoin('message_log', function ($join) use ($userId) {
$join->on('message.id', '=', 'message_log.message_id')
->where('message_log.user_id', '=', $userId);
})
->leftJoin('subscribe', function ($join) use ($userId) {
$join->on('subscribe.pcode_id', '=', 'message.receiver_id')
->where('subscribe.user_id', '=', $userId);
})
->select([
'message_log.id as message_log_id',
'message.id as message_id',
'message.content',
'message.type',
'message.sender_id',
'message.updated_at',
'message.created_at',
'message.dead_line',
\DB::raw('IF (message.`created_at` < subscribe.`created_at` , 1, 0) AS is_expired')
]);
$resQuery = \DB::table(\DB::raw("({$query->toSql()}) as sub"))
->mergeBindings($query)
->where('is_expired', '=', 0);
帝国金的菜园子
分享一些工作学习中的经验
188 声望
3 粉丝
推荐阅读
win10 docker laradock 搭建PHP“简易”开发环境
安装windows版本docker,并且安装,这里我选择使用hyperV【官网】:[链接]下载laradock【github】:[链接] {代码...} 进入laradock文件夹复制.env.example到.env打开.env,按需进行一些调整,比如: {代码...} 按...
小金子阅读 469
Laravel 配合 jwt 使用
测试使用的是Laravel5.5版本。安装 {代码...} 配置生成配置 {代码...} auth配置 {代码...} 编码控制器: {代码...} 路由:此处注意,我为了方便测试,使用了get方法,生产环境不建议使用get。 {代码...} 测试一下...
开源到赞 1阅读 3.2k
Laravel常用代码合集
用Laravel也有不短的时间了,也用过不少版本了,以下代码是在日常项目中收集,作为笔记,也分享出来,希望对你有点用处。注:版本没标注,若有不兼容的问题,微调即可。
开源到赞 1阅读 1.5k
Eloquent ORM 的 where 查询条件的解析器增强版
个人感觉 Eloquent ORM 的 where 条件解析场景并不是那么的丰富,很多条件的拼装都需要引入额外的 orWhere, whereNotIn, whereBetween, whereNotBetween 来辅助完成。这样在做一些抽象的底层查询方法时,不是很友...
big_cat赞 1阅读 1.7k
laravel 文档摘要2
数据库对于数据的保存数据库第一二三范式到底在说什么[链接]数据库的操作独立于 query builder 和 ORM 的存在ORM 的操作是在操作内存对象 是独立的ORM 的一个对象自带了操作 relationship 的方法query builder 的...
changsj阅读 501
Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 简单
Goravel 是一个功能完备、具有良好扩展能力的 Web 应用程序框架。作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用。框架风格与 Laravel 保持一致,让 PHPer 不用学习新的框架,也可以愉快的玩转 Golang!
韩同学的简单逻辑阅读 489
laravel 文档摘要
$request->input('date') 可以是 "2021-01-05 01:00:00" 字符串,通过 Carbon::parse($request->input('date') ?? now_local()),它可以被转化为 CarbonInterface::DateTimeInterface
changsj阅读 463
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。