如何使用laravel查询生成器编写此查询?

如何使用laravel查询生成器编写此查询?,laravel,laravel-5,Laravel,Laravel 5,我在使用postgres作为数据库的Laravel5.1上。我这里有一把小提琴,以防它有助于理解我的问题: 写这篇文章的大部分内容相当直截了当。我遇到的问题是属性为(…)的块。我试过这样的方法: DB::statement('WITH properties AS ( ... )') ->table('deals') ->select(' deals.*, json_agg(properties.*) as deal_properties, ') ...

我在使用postgres作为数据库的Laravel5.1上。我这里有一把小提琴,以防它有助于理解我的问题:

写这篇文章的大部分内容相当直截了当。我遇到的问题是属性为(…)的
块。我试过这样的方法:

DB::statement('WITH properties AS ( ... )')
    ->table('deals')
    ->select(' deals.*, json_agg(properties.*) as deal_properties,  ')
    ...
    ->get();
但是我注意到执行在
DB::statement()之后停止

查询生成器中是否有我缺少的方法?如何在查询前面加上
和属性(…)
语句


我想还应该注意的是,我正在尝试实现一个存储库模式,我不能只在整个查询中包装一个
DB::statement()

如果您想从表中获取一些数据,可以使用这种类型的代码

$user=DB::table('table name')->where('name','John')->where('height','!>','7')->select('table fields which you want fetch')->get()

或者尝试使用更大级别的、有说服力的ORM,这将使数据库更容易处理

更多示例或参考


我认为你可以通过快速加载来实现这一点, 假设关系设置正确。 (更多信息请参见此处:)

所以我想你可以加上

->with(['properties' => function ($query) {
    $query->select('field')
        ->leftJoin('join statement')
        ->groupBy('field1', 'field2');
}])

我已经为常用表表达式创建了一个包:

$query='选择属性。*,[…];
DB::表('deals')
->withExpression('properties',$query)
->leftJoin([…])
->[...]
还可以提供查询生成器实例:

$query=DB::table('properties')
->选择('properties.*',[…])
->leftJoin([…])
->[...]
DB::表('deals')
->withExpression('properties',$query)
->leftJoin([…])
->[...]

你试过
DB::select(“…”)
吗?试一下这个:DB::statement(DB::raw('WITH properties AS(…)'))我想使用查询生成器,而不是雄辩。非常好的包Jonas!我已经摆脱了这个问题,但我希望将来有人会觉得这有帮助。
->with(['properties' => function ($query) {
    $query->select('field')
        ->leftJoin('join statement')
        ->groupBy('field1', 'field2');
}])