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();
Categories: Laravel