下where子句查詢,其中where有三個參數
範例
$users = DB::table('users')->where('votes', '>=', 100)->get();
//如果是等於的話可以直接這樣寫
$users = DB::table('users')->where('votes', 100)->get();
//可以支援array
$users = DB::table('users')->where([
['status', '=', '1'],
['subscribed', '<>', '1'],
])->get();
跟where接收的參數相同
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
取得特定條件介於兩個範圍之間的資料,not則相反
$users = DB::table('users')->whereBetween('votes', [1, 100])->get();
日期也可以用,不過要小心如果是預設的
created_at
或是updated_at
因為有包含時間,會變成超過01秒以後就不在範圍內
範例: ->whereBetween('created_at', ['2018-09-28', '2018-10-01']),
則2018-10-01 00:00:00 (OK)
2018-10-01 00:00:01 (不包含)
取得特定條件包含在給定的陣列之內的資料,not則相反
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
取得特定條件為null的資料,not則相反
$users = DB::table('users')->whereNull('updated_at')->get();
取得特定條件為給定值的資料,這個是laravel為了方便使用包裝的方法,跟一般的where使用結果一樣,但是可以直接用method處理
$users = DB::table('users')->whereDate('created_at', '2016-12-31')->get();
兩個欄位做比較,而非指定值
//first_name 等於 lastname
$users = DB::table('users')->whereColumn('first_name', 'last_name')->get();
//中間可以加運算子
$users = DB::table('users')->whereColumn('updated_at', '>', 'created_at')->get();
//一樣可以用array,會是用and的方法join
$users = DB::table('users')
->whereColumn([
['first_name', '=', 'last_name'],
['updated_at', '>', 'created_at']
])->get();
有時候我們會需要比較複雜的where條件
DB::table('users')
->where('name', '=', 'John')
->orWhere(function ($query) {
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
上面的會等於底下的sql
select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
如果要使用where exists SQL 子句
DB::table('users')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
上面的會等於底下的sql
select * from users
where exists (
select 1 from orders where orders.user_id = users.id
)
現在有越來越多人會考慮在table欄位裡面放入JSON資料,
因此laravel也提供了Json的查詢方式,使用關鍵字->
$users = DB::table('users')
->where('options->language', 'en')
->get();
也可以查詢json arrays,注意SQLite不支援
$users = DB::table('users')
->whereJsonContains('options->languages', 'en')
->get();
MySQL 和 PostgreSQL 則支援查詢多個值
$users = DB::table('users')
->whereJsonContains('options->languages', ['en', 'de'])
->get();
另外也可以用 whereJsonLength
查詢 JSON arrays 的長度
$users = DB::table('users')
->whereJsonLength('options->languages', 0)
->get();
$users = DB::table('users')
->whereJsonLength('options->languages', '>', 1)
->get();
記得如果用insert的話,created_at
與 updated_at
欄位要自己寫入時間
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
如果要取得新增的id可以用 insertGetId
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
一樣可以用json,不過只支援MySQL 5.7+
DB::table('users')
->where('id', 1)
->update(['options->enabled' => true]);
DB::table('users')->where('votes', '>', 100)->delete();
如果要清空整張table,這個會連auto-incerment 的ID都重設為0
DB::table('users')->truncate();
結論: 其實關於DB操作的內容真的很多,之後的Eloquent Model的部分也是,因為時間剩下不多,所以只挑比較常用基本的跟大家介紹,其他還有更多方法歡迎參考laravel官網。
參考連結: