iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

學框架永不嫌晚,從現在開始學Laravel你也可以系列 第 9

Day 9 Laravel基礎功 - Data Query 2

  • 分享至 

  • xImage
  •  

如何來控制query?
首先讓我們來看一個簡單的範例,在Laravel中不需要定義伺服器連線物件
我們只要選定我們的資料表就可以取得一個表內的所有資料

<?php
 
    namespace App\Http\Controllers;

    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\DB;

    class UserController extends Controller
    {
        public function index()
        {
            $users = DB::table('users')->get();
            return view('user.index', ['users' => $users]);
        }
    }
?>

而從中又衍伸以下的寫法

<?php 

    //取得users表中name為John的第一筆資料
    DB::table('users')->where('name', 'John')->first();
    
    //取得users表中name為John的email欄位值
    DB::table('users')->where('name', 'John')->value('email')
    
    //取得users表中的第3筆資料
    DB::table('users')->find(3);
    
    //取得users表中特定欄位的資料
    DB::table('users')->pluck('title', 'name');
    
    //取得users表中按id排序的100筆資料
    DB::table('users')->orderBy('id')->chunk(100, function ($users) {
        foreach ($users as $user) {
            ...
            return false; //如果想在執行中停止可以回傳false
        }
        
    });
    
    //lazy有點像chunk,但它只會回傳統計的結果
    DB::table('users')->orderBy('id')->lazy()->each(function ($user) {
        //
    });
    
    //users的資料總筆數,可換成以下方法 max, min, avg, sum
    DB::table('users')->count();
    
    //求出orders 欄位finalized為1 並求全部price的平均值
    DB::table('orders')->where('finalized', 1)->avg('price');
    
    //回傳 true 或 false 目標資料存不存在
    DB::table('orders')->where('finalized', 1)->exists()
    DB::table('orders')->where('finalized', 1)->doesntExist()
    
    //取得users的資料且特別定義欄位的名稱
    DB::table('users')->select('name', 'email as user_email')->get();
    
    //所有欄位相同的資料只取出現1次
    DB::table('users')->distinct()->get();
    
    //在Users顯示搜尋結果時額外顯示自訂欄位和內容
    $query = DB::table('users')->select('name');
    $users = $query->addSelect('age')->get();
    
    //取得users有count的統計查詢結果
    DB::table('users')->select(DB::raw('count(*) as user_count, status'))
    ->where('status', '<>', 1)->groupBy('status')->get();
    
    //將price按照參數和公式變成查詢結果
    DB::table('orders')->selectRaw('price * ? as price_with_tax', [1.0825])->get();
    
    //若state的資料為TX且price大於200就取得該筆,若state不等於TX且price大於100取得該筆(orWhereRaw)
    DB::table('orders')->whereRaw('price > IF(state = "TX", ?, 100)', [200])->get();
    
    //若price總和大於2500就取得該筆統計資料(orHavingRaw)
    DB::table('orders')->select('department', DB::raw('SUM(price) as total_sales'))
    ->groupBy('department')->havingRaw('SUM(price) > ?', [2500])->get();
    
    //同意思為order by updated_at - created_at DESC
    DB::table('orders')->orderByRaw('updated_at - created_at DESC')->get();
    
    //同意思為group by city state
    DB::table('orders')->select('city', 'state')->groupByRaw('city, state')->get();

?>

上一篇
Day 8 Laravel基礎功 - Data Query 1
下一篇
Day 10 Laravel基礎功 - Data Query 3
系列文
學框架永不嫌晚,從現在開始學Laravel你也可以14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言