📜  laravel where on 关系列 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:13.202000             🧑  作者: Mango

Laravel Where On 关系列

在使用 Laravel 进行数据库查询时,where 条件非常常见。但是,有时候我们需要根据某些条件进行查询,但是这些条件过于复杂,使用 where 条件难以实现。这时候,我们可以使用 Laravel 的 where on 关系列,来实现更为复杂的查询。

什么是 Where On

Where On 是 Laravel 的一组高级查询构造器,允许我们在查询语句中使用 WHERE 语句和 JOIN 语句。如果您有一个大量数据的表格并且想要快速的查找数据,则可以使用 Where On。

Where Using

whereUsing 用于搜索需要连接的表格的主键列中的指定值的行。它允许我们使用连接的表格中的列而不是从主查询中列出列的 WHERE 子句。

语法如下:

->whereUsing($column, $operator, $values, $boolean = 'and', $not = false)

其中:

  • $column 表示需要查找的表格的主键列;
  • $operator 表示比较操作符;
  • $values 表示需要查找的值,可以是一个数组或一个自包含列;
  • $boolean 表示连接该子句的 boolean,可选 'and' 或 'or';
  • $not 表示是否使用 NOT 操作符。

代码示例:

$users = DB::table('users')
    ->join('contacts', 'users.id', '=', 'contacts.user_id')
    ->whereUsing('users.id', '=', DB::raw('contacts.user_id'))
    ->get();

以上代码可以理解为:在 users 表和 contacts 表之间进行 join 操作,然后在 users 表的 id 列和 contacts 表的 user_id 列中查找相同的值。

Where Raw

whereRaw 用于在 WHERE 子句中使用原始 SQL 语句,允许我们灵活地构造查询条件。

语法如下:

->whereRaw($sql, $bindings = [], $boolean = 'and')

其中:

  • $sql 表示原始的 SQL 查询语句;
  • $bindings 表示需要绑定到查询语句中的参数;
  • $boolean 表示连接该子句的 boolean,可选 'and' 或 'or'。

代码示例:

$users = DB::table('users')
    ->whereRaw('id > ? and name = ?', [1, 'John'])
    ->get();

以上代码可以理解为:在 users 表中查找 id 大于 1 且名字为 John 的用户。

Where Exists

whereExists 用于在查询中存在一个子查询的行上执行 WHERE 子句。

语法如下:

->whereExists(\Closure $callback, $boolean = 'and', $not = false)

其中:

  • $callback 表示子查询的回调函数;
  • $boolean 表示连接该子句的 boolean,可选 'and' 或 'or';
  • $not 表示是否使用 NOT 操作符。

代码示例:

$subQuery = DB::table('orders')
    ->select('user_id')
    ->whereRaw('total > 100');
    
$users = DB::table('users')
    ->whereExists($subQuery)
    ->get();

以上代码可以理解为:在 users 表中查询存在 orders 表中,total 大于 100 的用户。

Where Between Columns

whereBetweenColumns 用于在查询中比较两列之间的值。

语法如下:

->whereBetweenColumns($first, $operator, $second, $boolean = 'and', $not = false)

其中:

  • $first 和 $second 表示需要比较的两列;
  • $operator 表示比较操作符;
  • $boolean 表示连接该子句的 boolean,可选 'and' 或 'or';
  • $not 表示是否使用 NOT 操作符。

代码示例:

$users = DB::table('users')
    ->whereBetweenColumns('updated_at', '<', 'created_at')
    ->get();

以上代码可以理解为:在 users 表中查询更新时间早于创建时间的用户。

总结:Laravel Where On 关系列提供了多种语法去构造复杂的查询条件,不仅仅局限于简单的 where 条件,这样可以更加轻松地实现各种复杂的查询需求。