使用Tinker來除錯Laravel應用程式的資料以及使用Tinker一些總結

iMax發表於2018-03-07

今天我們將討論如何使用Laravel的一些鮮為人知的功能來快速讀取Laravel應用程式中的資料。我們可以使用Laravel的手工內建php artisan tinker工具來處理資料庫中的應用程式和事物。

Laravel artisan的tinker程式是一個 REPL (read-eval-print-loop)。repl翻譯為read-eval-print-loop(互動式命令列介面),它是一個互動式語言shell。它可以讓你輸入一段程式碼去執行,並把執行結果直接列印到命令列介面裡。

  • 快速簡便的方式檢視資料庫中的資料

輸入下面命令列,可以直接看到結果

// see the count of all users
App\User::count();

// find a specific user and see their attributes
App\User::where('username', 'samuel')->first();

// find the relationships of a user
$user = App\User::with('posts')->first();
$user->posts;
複製程式碼

使用php artisan tinker,我們可以很快做到這點。Tinker是Laravel自帶的repl,基於PsySH。它使我們能夠與我們的應用程式進行互動,dd()die()停下來。我們中的很多人都知道當我們的程式碼中存在print_r()dd()時發生的痛苦。

在使用Tinker之前,我們先建立一個演示專案。我們稱之為ScotchTest。如果您的計算機上安裝了laravel安裝程式,請執行此命令。

laravel new ScotchTest
複製程式碼

對於那些在他們的計算機上沒有Laravel安裝程式的人,可以使用composer來建立一個新的Laravel專案。

composer create-project laravel/laravel ScotchTest --prefer-dist
或者指定laravel版本
composer create-project laravel/laravel=5.3 ScotchTest --prefer-dist
複製程式碼

1. 資料庫設定:執行遷移

安裝我們的演示Laravel專案後,我們需要建立一個資料庫並設定遷移。對於本文我們將使用預設的Laravel遷移。因此我們將.env檔案配置為指向您為此測試建立的資料庫。預設遷移包括建立一個users表和一個password_resets表。

php artisan migrate
複製程式碼

遷移我們的資料庫後,我們應該看到類似的資訊

1

2. 填充我們的資料庫

預設情況下,Laravel提供了一個模型工廠model factory我們可以使用它來為我們的資料庫建立種子。

現在讓我們開始使用Tinker。

php artisan tinker
複製程式碼

這條命令會開啟一個 REPL 視窗供我們使用。剛才我們已經執行過 migration, 現在我們可以直接在 REPL 中使用模型工廠來填充資料。

factory(App\User::class, 10)->create();
複製程式碼

十個新使用者的集合應顯示在您的終端上。然後我們可以檢查資料庫以檢視使用者是否真正建立。

App\User::all();
複製程式碼

為了讓我們的資料庫中的使用者總數,我們可以直接呼叫countUser模型。

App\User::count();
複製程式碼

在執行完 App\User::all()App\User::count() 之後,我的輸出是這個樣子的,你們的輸出應該和我差不多,僅僅是生成的內容不同。

2

3. 建立一個新使用者

通過 REPL,我們還可以建立一個新使用者。你應該已經注意到,我們在 REPL 使用的命令跟我們在 laravel 中所寫的程式碼是一樣的。所以建立一個新使用者的程式碼:

$user = new App\User;
$user->name = "imax";
$user->email = "imax@gmail.com";
$user->password = bcrypt("12345");
$user->save();
複製程式碼

3

現在輸入 $user,可以看到

4

4. 刪除一個使用者

要刪除 id 為 1 的使用者:

$user = App\User::find(1);
$user->delete();
複製程式碼

5. 查閱某個 類/方法 的註釋文件

通過 tinker,你可以在 REPL 中檢視某個 類/方法 的註釋文件。但是文件內容取決於這個 類/方法 是否有一個文件註釋塊(DocBlocks)。

doc <functionName> # replace <functionName> with function name or class FQN

複製程式碼

比如,查閱 dd的註釋文件

5

6. 檢視原始碼

我們還可以在repl使用過程中檢查一個函式或類的原始碼

show <functionName>
複製程式碼

例如,呼叫show在dd此給我們。

6

7. 總結

Laravel Tinker是一款工具,可以幫助我們輕鬆地與我們的應用程式進行互動,而無需啟動本地伺服器。想想你想從你的專案中刪除的幾行文字中測試一個簡單的功能,只需要使用php artisan tinker就可以了。

8. 遇到的一些問題和解決辦法

8.1 關於使用tinker使用中文報錯的問題

如果你用的是Laravel的5.3的版本, 想要插入中文的測試資料,會發生如下的報錯資訊

7

解決辦法

1.修改 ~/www/laravel/vendor/fzaninotto/faker/src/Faker/Factory.php 的const DEFAULT_LOCALE = 'en_US'; 改為const DEFAULT_LOCALE = 'zh_CN';

2.複製 ~/www/laravel/vendor/fzaninotto/faker/src/Faker/Provider/en_US/Text.php

到zh_CN目錄下

3.並把對應的名稱空間的名稱修改為namespace Faker\Provider\zh_CN; 4.我們重新執行php artisan tinker,用工廠模型建立10條資料看一下。

php artisan tinker
複製程式碼
factory(App\User::class, 10)->create();
複製程式碼

8

再次驗證一下

$user = new App\User();
$user->name = "大熊貓";
複製程式碼

9

8.2 關於windowscmd終端Tinker中文亂碼的問題

# 將終端改成UTF8字元
先輸入 CHCP 65001
然後開啟【屬性】,將字型改為【Lucida Console】
複製程式碼

8.3 Tinker對於修改器仍然有效

	// 在User模型設定修改器
    public function setNameAttribute($value)
    {
        $this->attributes['name'] = strtolower($value);
    }
複製程式碼

10

8.4 Tinker為後臺新增管理員

一般後臺管理平臺,都是禁用掉註冊功能的。 那怎麼新增一個管理員賬號呢。

參考步驟三其實就可以了。

不過除了使用bcrypt()加密, 還可以使用Hash::mark()

$user->password = Hash::make('serct');
複製程式碼

原文連結 使用Tinker來除錯Laravel應用程式的資料以及使用Tinker一些總結

參考資料[1] Tinker with the Data in Your Laravel Apps with Php Artisan Tinker

參考資料[2] 使用 Php Artisan Tinker 來除錯你的 Laravel

參考資料[3] Laravel框架填充中文資料測試資料

相關文章