一、設定
在 config/database.php 檔案裡會看到很多不同的資料庫連線資訊。'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ],如果是要配合我們公司的系統資料庫,這裡要將編碼改成 utf8,因為公司的系統資料庫不支援 utf8mb4。
在 config/database.php 裡頭有看到一些寫著類似 env('DB_HOST', '127.0.0.1') 的語法,之前也有說過 env 會去抓網站的環境設定檔 .env 裡面的值,如果沒有的話就帶後面的預設值,所以我們需要在 .env 檔裡面去設定資料庫的相關資訊。
一般來說 .env 這個檔案不會進版本控制系統。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=my_web_database DB_USERNAME=root DB_PASSWORD=12345678
二、Migration
這是一個資料庫版本控制的機制,只針對「結構」的部分,而不是「資料」的部分。1. 建立 migration
php artisan make:migration create_posts_table --create=post這時我們可以在 /database/migrations 看到 2017_05_08_080254_create_posts_table.php 這樣子的檔案。
up() 是版本發布時會 run 的指令,down() 則是還原時會 run 的指令。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('content'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } }中間內容的部分這裡只列出幾種常見的,其他詳細內容請自行參考:https://laravel.com/docs/5.4/migrations#tables。
語法 | 說明 |
---|---|
$table->increments('id'); | 一個遞增的 id 欄位(主鍵) |
$table->string('title'); | VARCHAR |
$table->text('content'); | TEXT |
$table->integer('votes'); | INT |
$table->timestamps(); | 會變成兩個 TIMESTAMP 欄位,分別是 created_at 和 updated_at |
2. 執行 migration
php artisan migrate第一次執行之後會在資料庫中建立一個 migrations 資料表來記錄版本。
3. 還原 migration
php artisan migrate:rollback
三、Query Builder
這裡列出一些常用的,主要是針對查詢的部分說明,還有很多這裡沒有列,如果需要請查詢:https://laravel.com/docs/5.4/queries。1. 取得結果
get() 是取得結果的方法,例如:Post::where('id', '>', 3)->get()如果不需要其他 sql 語法單純的取得整張資料表的資料也可以用 all(),例如:
Post::all();如果是要第一筆資料也可以使用 first(),例如:
Post::where('id', '>', 3)->first();另外,也可以使用 count、max、min、avg、sum 取得結果。
$price = Order::where('finalized', 1)->avg('price');
2. select
select 是 select 欄位。$posts = Post::select('title', 'content as post_content')->get();
3. join
inner join
$posts = Post::join('categories', 'posts.category_id', '=', 'categories.id')->get();
left join
$posts = Post::leftJoin('categories', 'posts.category_id', '=', 'categories.id')->get();
4. where
$posts = Post::where('id', 5)->get();取得 id = 5 的文章。
$posts = Post::where('id', '>', 5)->get();取得 id > 5 的文章。
$posts = Post::where('title', 'like', "%學測%")->get();取得標題有「學測」的文章。
5. 排序
$posts = Post::where('id', '>', 5)->orderBy('id', 'desc')->get();
6. Group
$posts = Post::where('id', '>', 5)->groupBy('user_id')->get();
7. 其他
如果這些都沒辦法組成我們想要的 SQL,這時我們可以使用 DB::raw('這裡放語法') 來達成。四、分頁
一頁 15 筆資料$posts = Post::where('title', 'like', "%學測%")->paginate(15);
1. 顯示
<div class="container"> @foreach ($posts as $post) {{ $post->title }} @endforeach </div> {{ $posts->links() }}如果我們有其他的查詢條件
{{ $posts->appends(['title' => '學測'])->links() }}
留言
張貼留言