laravel 如何在另一个子查询中使用子查询中的列?

brccelvz  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(113)
User::query()
->addSelect(['col_a' => function($q){
   $q->select('table_a.some_col')
   ->from('table_a')
   ->whereColumn('users.some_col', 'table_a.some_col')
   ->limit(1);
}])
->addSelect(['col_b' => function($q){
   $q->select(DB::raw("table_b.some_col * col_a"))
   ->from('table_b')
   ->whereColumn('users.some_col', 'table_b.some_col')
   ->limit(1);
}])
->get();

如何在第二个addSelect()函数中使用col_a?上面的查询将导致未知列'col_a'错误

ix0qys7i

ix0qys7i1#

要在第二个addSelect函数中使用col_a列,可以使用DB::raw函数在原始SQL查询中引用该列。
以下示例说明如何修改代码以在第二个addSelect函数中使用col_a列

User::query()
->addSelect(['col_a'], function($q){
   $q->select('table_a.some_col')
   ->from('table_a')
   ->whereColumn('users.some_col', 'table_a.some_col')
   ->limit(1);
})
->addSelect(['col_b'], function($q){
   $q->select(DB::raw("table_b.some_col * col_a"))
   ->from('table_b')
   ->whereColumn('users.some_col', 'table_b.some_col')
   ->limit(1);
})
->get();

通过使用DB::raw函数,您可以引用原始SQL查询中的col_a列,就好像它是users表中的常规列一样。

相关问题