php - Laravel - 查询构建器中同一个表的两个或多个别名
问题描述
我需要SQL
使用查询生成器在 Laravel 中复制一个查询,但我不知道如何为同一张表定义多个别名。
我有这个SQL
查询工作正常。
select b.url as url, b.id as id
from item a, item b
where a.type = 'big'
AND a.published = 1
AND b.parent_id = a.id
AND b.published = 1
这是 Laravel 的尝试:
$query = DB::table('item as a, item as b');
$query->where('a.type', '=', 'big');
$query->where('a.published', '=', 1);
$query->where('b.parent_id', '=', 'a.id');
$query->where('b.published', '=', 1);
我也尝试:
$query = DB::table('item');
$query->fromRaw('item a, item b');
$query->where('a.type', '=', 'big');
$query->where('a.published', '=', 1);
$query->where('b.parent_id', '=', 'a.id');
$query->where('b.published', '=', 1);
我需要使用查询生成器,因为我在接下来的步骤中需要一些条件,这就是为什么我不能使用简单的“hasMany”关系。
更新items
表格详细信息:
解决方案
#原始表达式
有时您可能需要在查询中使用原始表达式。这些表达式将作为字符串注入到查询中,因此请注意不要创建任何 SQL 注入点!要创建原始表达式,您可以使用以下DB::raw
方法:
https://laravel.com/docs/4.2/queries#raw-expressions
$query = DB::table(DB::raw('item as a, item as b'))
->where('a.type', '=', 'big')
->where('a.published','=',1)
->where('b.parent_id','=', DB::raw('a.id'))
->select('b.url','b.id')
->get();
推荐阅读
- java - 理解 flink jobmanager 内存
- javascript - 我正在使用在数组中插入时提供数据的 highcharts 但我想动态插入数据
- sql - SQL:显示字符串减去某个单词
- r - 在二进制列中插入另一列的值
- c# - 为什么 typeof(T) != instance.getType()?
- ruby-on-rails - 列出来自 Github 组织的所有用户 && 避免 Octokit gem 限制
- javascript - 使用 setInterval() 在 NodeJS 上创建多个 Timeout 对象
- ionic-framework - 使用离子电容器打开设备设置
- autohotkey - 控制点击在浏览器的后台不起作用
- python - 当另一个客户端连接到服务器时客户端断开连接