又LAG隨性筆記
  • 關於我
  • 作品集
  • 生活隨筆
  • 與我聯絡
  • 隨手扎

隨手扎

October 7, 2019

30天成爲Laravel萌新(第20天) - 資源控制器(Resource Controller) 上篇

CRUD & RESTful

所謂CRUD是Create、Read、Update、Delete。昨天已經從資料庫模型(Model)的角度看過基本操作了,今天要將些操作加入到控制器(Controller)。

C | Create
R | Read
U | Update
D | Delete

另外,還需要另外知道的一件事情是RESTful。RESTful並不是硬性規定,只是一種在HTTP請求上的一種慣例設計。通常HTTP請求方法有GET、POST、PUT、DELETE、PATCH,以及HEAD、CONNECT、OPTIONS、TRACE。以下節錄自MDN:

GET
GET 方法請求展示指定資源。使用 GET 的請求只應用於取得資料。
HEAD
HEAD 方法請求與 GET 方法相同的回應,但它沒有回應主體(response body)。
POST
POST 方法用於提交指定資源的實體,通常會改變伺服器的狀態或副作用(side effect)。
PUT
PUT 方法會取代指定資源所酬載請求(request payload)的所有表現。
DELETE
DELETE 方法會刪除指定資源.
CONNECT
CONNECT 方法會和指定資源標明的伺服器之間,建立隧道(tunnel)。
OPTIONS
OPTIONS 方法描述指定資源的溝通方法(communication option)。
TRACE
TRACE 方法會與指定資源標明的伺服器之間,執行迴路返回測試(loop-back test)。
PATCH
PATCH 方法套用指定資源的部份修改。

其實也就差不多對應了CRUD的操作:

CRUDRESTful
CreatePOST / PUT
ReadGET
UpdatePATCH / PUT
DeleteDelete
October 6, 2019

30天成爲Laravel萌新(第19天) - Model的基本操作

ORM是物件關聯對映(Object Relational Mapping)。在Larvel裡提供的 Eloquent ORM能讓開發者以一個簡單、美觀的方式操作關聯式資料庫。今天就來寫一點點基本的操作,更多可以查看文件,以及Laravel資料庫相關文件。

Select All

在SQL,可能會用SELECT * FROM <TABLE>;來取得所有資料,儘管在資料量龐大時,這樣操作並不好,但是Laravel同樣有對應的操作:

use \App\BlogPost

$posts = App\BlogPost::all();

foreach ($posts as $post) {
    echo $post->title;
}

條件查詢Where

條件查詢也非常長使用到:

$post = App\BlogPost::where('id', 1)->get();
               // ->orderBy('name', 'desc') // 還可以加以設定以下參數
               // ->take(10)
               // ->get();

用where自然很容易從SQL轉換了解。不過,Laravel有更簡單的方式針對主鍵做查詢:

$post = App\BlogPost::find(1);

// 等同於

$post = App\BlogPost::where('active', 1)->first();
October 5, 2019

30天成爲Laravel萌新(第18天) - 建立Model

前幾天建立了Blog Post在資料庫的Schema,並且遷移(Migration)進資料庫,建立相關的資料表(blog_post)。為了讓Larave提供的ORM系統,以一個美觀、簡易的方式操作資料庫,還得建立BlogPost Model類別。

當然也可以使用artisan建立一個樣板:

artisan make:model BlogPost

然後會有app/BlogPost.php的檔案

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BlogPost extends Model
{
    //
}

這次,只需要簡單改成下面的樣子就好:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BlogPost extends Model
{
    protected $table = "blog_post";
    // protected $primaryKey = 'id';
    // public $timestamps = false;
}
October 4, 2019

30天成爲Laravel萌新(第17天) - 資料庫管理工具(下)‧使用DBeaver

今天要在介紹一個,我用過後就喜歡上的資料庫管理工具–DBeaver。

DBeaver的兩個版本

DBeaver Download Page

DBeaver有社區版和企業版兩種。社區版可以免費使用,並且跨平台,透過JDBC支援多種資料庫。此外還會自動檢測資料庫版本,自動尋找相對應的Drive。

我手動配置過phpMyAdmin過。同樣直接下載安裝的情況下,DBeaver簡單好多。

界面

DBeaver的界面很漂亮,我還蠻喜歡的。其中還有一個功能測試時非常好用–產生假資料。這個和前幾天亂數短文很像,不過DBeaver會針對欄位型態產生資料。資料庫測試的模擬數據生成(Mock Data Generation)也有一些限制,有些資料類型還是無法產生。

連線資料庫並填入資料

說了這麼多,相信已經下載安裝好了吧?該像昨天一樣,來連接資料庫,並塞入文章吧!

October 3, 2019

30天成爲Laravel萌新(第16天) - 資料庫管理工具(上)‧使用phpMyAdmin

今天,要用 phpMyAdmin 來看看昨天建立的資料表,我會順面補充一些之前做的設定。

查看Docker容器狀態

我會假設使用的是laradock,如果你使用的是XAMPP可能會簡單一些。

那麼,首先先看看運行的容器:

docker-compose ps

我們之前有啟動phpMyAdmin的服務,那麼輸出應該包含下面內容:

           Name                          Command               State                    Ports
---------------------------------------------------------------------------------------------------------------
laradock_phpmyadmin_1         /docker-entrypoint.sh apac ...   Up      0.0.0.0:8080->80/tcp

其中注意到 Ports 的部份,這意思是綁定(bind)電腦8080端口到容器的80端口。所以我們可以透過瀏覽 http://localhost:8080 來使用phpMyAdmin。

登入phpMyAdmin

這裡伺服器要輸入mariadb,帳號和密碼分別是:default和secret。如果你是啟用MySQL的話,伺服器就改成mysql。

phpMyAdmin Login Page

October 2, 2019

30天成爲Laravel萌新(第15天) - 建立資料庫Migration

要把文章存入資料庫?那麼對於傳統關聯式資料庫,需要先建立資料表Schema。你可以透過明天要介紹的資料庫管理工具,也可以透過今天來來說的使用 Artisan 建立資料表。

使用Artisan建立資料表

Artisan可以快速的建立控制器基本模板,同樣也可以建立資料庫相關模板:

artisan make:migration create_blog_post_table

透過上面命令,會在database/migrations新增相關檔案,檔名由<日期><時間>_create_blog_post_table組成。前面時間相關的在某些情況下會很重要,後面介紹的 artiasn 命令會依序建立資料表,所以如果資料表有相互依賴就有影像。現在我們開啟該檔案看看:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBlogPostTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('blog_post', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('blog_post');
    }
}

其中最重要兩行:

$table->bigIncrements('id');
$table->timestamps();
  • ««
  • «
  • 1
  • 2
  • 3
  •  … 
  • 28
  • 29
  • 30
  •  … 
  • 33
  • »
  • »»
© 又LAG隨性筆記 2023