[Laravel] 使用 MigrateSpecific 遷移指定檔案到資料庫

當我們將 migration file 遷移到資料庫後,日後想要直接修改原先的 migration file 而不是新增一個去做結構變更時,可以透過 migrate:refresh 重新遷移,但是如果前一次遷移包含多個檔案時,這些資料表都會受到影響;若想要修改的資料表不屬於上一個批次(batch),透過 –step 選項去做遷移,影響範圍就會更大。

常見的做法是建立一個臨時目錄,將 migration file 放進去後執行遷移,但是這個做法僅適用於第一次遷移;另一種方式是修改資料表 migrations 的批次號碼,讓指定的 migration file 成為上一個批次。

這些都是臨時性做法,若是有很多批要修改就會很麻煩,所以我就寫了一個小工具,之後用一行指令就可以解決這個問題。

 

Package Name: MigrateSpecific
Version: 1.2.1
Site: https://github.com/caloskao/migrate-specific

Read more “[Laravel] 使用 MigrateSpecific 遷移指定檔案到資料庫”

發表留言

[PHP] 提升 json_encode() 資料可讀性

PHP 可藉由 json_encode()json_decode() 來編碼與解碼 JSON 格式的資料,在一般情況下不需要特別給予任何參數,但如果將 JSON 格式資料直接儲存的話,預設是儲存一行文,在不靠任何工具的前提下僅以肉眼辨識會顯得有點吃力。

$data = [
    '5b8e2e456106f8.12710761' => [
        'id' => '5b8e2e456106f8.12710761',
        'description' => '',
        'options' => [],
        'size' => 1243916,
        'create_at' => '2018-09-04 15:04:02'
    ]
];
echo json_encode($data);

 

輸出如下:

{"5b8e2e456106f8.12710761":{"id":"5b8e2e456106f8.12710761","description":"","options":[],"size":1243916,"create_at":"2018-09-04 15:04:02"}}

 

如果想要提升 JSON 格式資料的可讀性,只需要將 json_encode() 的第二個參數設為 JSON_PRETTY_PRINT 即可。

echo json_encode($data, JSON_PRETTY_PRINT);

 

輸出:

{
    "5b8e2e456106f8.12710761": {
        "id": "5b8e2e456106f8.12710761",
        "description": "",
        "options": [],
        "size": 1243916,
        "create_at": "2018-09-04 15:04:02"
    }
}

 

PHP 5.6.6 以上可選擇的參數共有 11 個,詳細說明可見 PHP 官網 

 

 

 
 
發表留言

[PHP] 如何判斷關聯式陣列與循序式陣列?

PHP 陣列索引預設為由 0 開始遞增的循序數列,同時也支援自行設定索引值。

// 序列式
$sequentialArray = ['A', 'B', 'C'];
/*
Array
(
    [0] => A
    [1] => B
    [2] => C
)
*/

// 關聯式
$associativeArray = ['a' => 'A', 'b' => 'B', 'c' => 'C'];
/*
Array
(
    [a] => A
    [b] => B
    [c] => C
)
*/

判斷兩者的方式為檢查陣列索引是否為一公差為 1 的循序數列。先利用 array_keys() 取得所有陣列索引值後,再利用 range() 產生一個循序整數陣列,比對兩者內容即可判斷:

function is_assoc( array $array ) {
    if ( [] === $array ) return false;
    return array_keys($array) !== range(0, count($array) - 1);
}

var_dump( is_assoc(['a', 'b', 'c']) ); // false
var_dump( is_assoc(['0' => 'a', '1' => 'b', '2' => 'c']) ); // false
var_dump( is_assoc(['1' => 'a', '0' => 'b', '2' => 'c']) ); // true
var_dump( is_assoc(['a' => 'a', 'b' => 'b', 'c' => 'c']) ); // true

Reference: How to check if PHP array is associative or sequential? – Stack Overflow

發表留言

[PHP] 序列化資料線上編輯器

PHP 可以透過 serialize() 將物件轉換成序列化文字資料後儲存在任何地方,需要使用的時候再透過 unserialize() 進行反序列化後得到原始物件,但因為序列化資料會記錄資料長度,因此如果想直接修改序列化資料的內容,需要連同資料長度也一起算進去,手動修改時麻煩且容易出錯。這時候可以透過 Serialized PHP Editor  這個 PHP 序列化資料線上編輯器進行修改就會方便很多。

Read more “[PHP] 序列化資料線上編輯器”

發表留言

[Ubuntu] 安裝 Apache HTTP Server 2.4 + PHP 7.1 + PHP-FPM

操作環境:
OS: Ubuntu Server 16.04.3 LTS amd64
Apache Version: 2.4.27
PHP Version: 7.1.8

 

Step 1. 更新 APT Source,取得最新版套件資訊

# 安裝software-properties-common (已安裝者可跳過此步驟)
sudo apt-get install -y software-properties-common

# 加入 Apache PPA
sudo add-apt-repository -y ppa:ondrej/apache2

# 加入 PHP PPA
sudo add-apt-repository -y ppa:ondrej/php

# 更新套件清單
sudo apt-get update

Read more “[Ubuntu] 安裝 Apache HTTP Server 2.4 + PHP 7.1 + PHP-FPM”

發表留言