這學期修系上的 網際網路資料庫程式設計
,課程主要使用 PHP + MySQL。
期末專題,在 MySQL 資料庫操作上,沒有直接使用 PHP 內建的 PDO、mysqli
而是使用 ORM(Object Relational Mapping) 進行開發,這次使用的 PHP ORM 叫作 Propel
。
高職的時候為了完成畢聯會的程式,就曾經使用過 Propel 進行開發。
當初找 PHP ORM 的資料有看到 Doctrine
、Propel
,當時看到 Propel 官方頁面比較漂亮,所以就選擇了 Propel,不過再重新選擇一次的話,大概會選擇 Doctrine,原因無它,明顯 Doctrine 開發比較活躍,GitHub 上的狀況看起來比較健康。
不過 Propel 算是一套蠻容易上手的 ORM,寫起來也蠻舒服的,考慮學習成本的情況選擇了熟悉的 Propel。
這次主要使用 WAMP (Windows / Apache / MySQL / PHP) 開發環境如下
Windows Version: Windows 7 Professional SP1 64-bit
XAMPP Version: 5.6.30
Composer version 1.4.2 2017-05-17 08:17:52
1 | ~# pwd |
1 | ~$ vim composer.json |
1 | { |
1 | ~$ composer install |
1 | ~$ mkdir orm && cd orm |
Propel 有一個殺手級功能,Propel 可以針對存在的 database 進行 Schema reverse engineering !
Propel init 是 Propel 的初始化工具,會用問答式的方式 產生出需要的配置文件 (當然也可以自己手動撰寫配置文件,有興趣可以自行參考官方的 Document)
1 | ~$ ../vendor/propel/propel/bin/propel init |
1 | Propel 2 Initializer |
下面是從建立用於示範的 propel_example 資料庫中導出的 .sql 文件
1 | -- |
這是 Propel 針對 database 進行 reverse engineering 生成的 schema.xml(Database Schema)
1 |
|
1 | ~$ vim composer.json |
下面是一個使用 propel model 的範例,簡單的實作 CRUD (Create、Read、Update、Delete),命名為 crud.php
1 |
|
CRUD 的 output:
1 | // Read |
下面是取出 Product 這個 table 所有資料的範例
1 | $products = (new ProductQuery())->create()->find(); |
順帶一提 model/Base 中的 Blog.php / BlogQuery.php 是很好的 documentation
1 | /** |
1 | * @method ChildBlog findOneById(int $id) Return the first ChildBlog filtered by the id column |
1 | ~$ propel sql:build |