Laravel 中的 Query Builder 是一個可以幫你組合 SQL Query 並連結資料庫的物件,底層是使用 PDO 連結資料庫。
如果沒有使用 Eloquent ORM 的話,Query Builder 也是個不錯的選擇
1.Select
// Select All $result = DB::table('genre')->get(); // 搜尋條件 + 取得第一筆 raw $result = DB::table('genre') ->where('genre_name', '國語歌曲') ->where('genre_id', 28); ->first(); // Order By $result = DB::table('genre') ->orderBy('genre_id', 'DESC') ->get(); // 利用 pluck 取該欄位的值 $result = DB::table('genre') ->where('genre_name', '國語歌曲') ->pluck('genre_name'); // List 該欄位的值 $result = DB::table('genre')->lists('genre_name'); // value key $result = DB::table('genre')->lists('genre_name', 'genre_id'); // 選擇欄位 $result = DB::table('genre')->select('genre_id', 'genre_name')->get(); // 更換欄位名稱 $result = DB::table('genre')->select('genre_id as id')->get();
2.Join
// Join $result = DB::table('album') ->join('song', 'song_id', '=', 'song.song_id') ->get(); // Left Join $result = DB::table('album') ->leftJoin('song', 'song_id', '=', 'song.song_id') ->get();
3.Advanced Wheres
$artist_name = 'Johnson'; // SELECT * FROM artist WHERE company <> 'TEST' AND (aritst_name LIKE 'Johnson%' OR artist_twname LIKE 'Johnson%') $artistObj = Artist::where('company', '<>', 'TEST') ->where(function($query) use ($artist_name) { $query->where('artist_name', 'LIKE', $artist_name . '%') ->orWhere('artist_twname', 'LIKE', $artist_name . '%'); }) ->get();
4.Aggregates
$users = DB::table('users')->count(); $price = DB::table('orders')->max('price'); $price = DB::table('orders')->min('price'); $price = DB::table('orders')->avg('price'); $total = DB::table('users')->sum('votes');
5.Insert
// Insert DB::table('users')->insert( array('email' => 'johnson@example.com', 'age' => 25) ); // Insert Get ID $id = DB::table('users')->insertGetId( array('email' => 'johnson@example.com', 'age' => 25) );
6.Update
// Update DB::table('users') ->where('id', 1) ->update(array('votes' => 1));
7.Show Query String
// Order By $result = DB::table('genre') ->orderBy('genre_id', 'DESC') ->toSql(); echo $result;
8.Limit
// LIMIT 1, 10 $result = DB::table('song') ->where('type', 'open') ->skip(1) ->take(10) ->get();