我需要使用查询生成器在Laravel中复制一个SQL
查询,但是我不知道如何为同一个表定义多个别名。
我的这个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
表详细信息进行更新:
答案 0 :(得分:4)
#原始表达式
有时您可能需要在查询中使用原始表达式。这些表达式将作为字符串注入查询中,因此请注意不要创建任何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();