企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# select子句 ### [](https://octobercms.com/docs/database/query#selects)选择 #### 指定选择子句 当然,您可能并不总是希望从数据库表中选择所有列。使用该`select`方法,可以`select`为查询指定一个自定义子句: ~~~ $users = Db::table('users')->select('name', 'email as user_email')->get(); ~~~ 该`distinct`方法允许您强制查询返回不同的结果: ~~~ $users = Db::table('users')->distinct()->get(); ~~~ 如果您已经具有查询生成器实例,并且希望将列添加到其现有的select子句中,则可以使用以下`addSelect`方法: ~~~ $query = Db::table('users')->select('name'); $users = $query->addSelect('age')->get(); ~~~ 如果希望将列和/或字符串连接在一起,则可以使用该`selectConcat`方法来指定一系列连接值和结果别名。如果希望在串联中使用字符串,则必须提供带引号的字符串: ~~~ $query = Db::table('users')->selectConcat(['"Name: "', 'first_name', 'last_name'], 'name_string'); $nameString = $query->first()->name_string; // Name: John Smith ~~~ #### 原始表达 有时您可能需要在查询中使用原始表达式。要创建原始表达式,可以使用以下`Db::raw`方法: ~~~ $users = Db::table('users') ->select(Db::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get(); ~~~ > **注意:**Raw语句将作为字符串注入到查询中,因此您应格外小心,不要创建SQL注入漏洞。 #### 原始方法 除了使用之外`Db::raw`,您还可以使用以下方法将原始表达式插入查询的各个部分。 **selectRaw** 该`selectRaw`方法可以代替。`addSelect(Db::raw(...)).`此方法接受可选的绑定数组作为其第二个参数: ~~~ $orders = Db::table('orders') ->selectRaw('price * ? as price_with_tax', [1.0825]) ->get(); ~~~ **whereRaw / orWhereRaw** 该`whereRaw`和`orWhereRaw`方法可用于注入原始`where`条款到你的查询。这些方法接受可选的绑定数组作为其第二个参数: ~~~ $orders = Db::table('orders') ->whereRaw('price > IF(state = "TX", ?, 100)', [200]) ->get(); ~~~ **HaveRaw / orHavingRaw** 所述`havingRaw`和`orHavingRaw`方法可以被用来设置一个原始字符串作为值`having`子句。这些方法接受可选的绑定数组作为其第二个参数: ~~~ $orders = Db::table('orders') ->select('department', Db::raw('SUM(price) as total_sales')) ->groupBy('department') ->havingRaw('SUM(price) > ?', [2500]) ->get(); ~~~ **orderByRaw** 该`orderByRaw`方法可用于将原始字符串设置为order by子句的值: ~~~ $orders = Db::table('orders') ->orderByRaw('updated_at - created_at DESC') ->get(); ~~~ **groupByRaw** 该`groupByRaw`方法可用于将原始字符串设置为group by子句的值: ~~~ $orders = Db::table('orders') ->select('city', 'state') ->groupByRaw('city, state') ->get(); ~~~