使用Tinker來調試Laravel應用程序的數據以及使用Tinker一些總結

今天咱們將討論如何使用Laravel的一些不爲人知的功能來快速讀取Laravel應用程序中的數據。咱們可使用Laravel的手工內置php artisan tinker工具來處理數據庫中的應用程序和事物。php

Laravel artisan的tinker程序是一個 REPL (read-eval-print-loop)。repl翻譯爲read-eval-print-loop(交互式命令行界面),它是一個交互式語言shell。它可讓你輸入一段代碼去執行,並把執行結果直接打印到命令行界面裏。html

  • 快速簡便的方式查看數據庫中的數據

輸入下面命令行,能夠直接看到結果laravel

// 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()時發生的痛苦。shell

在使用Tinker以前,咱們先建立一個演示項目。咱們稱之爲ScotchTest。若是您的計算機上安裝了laravel安裝程序,請運行此命令。數據庫

laravel new ScotchTest
複製代碼

對於那些在他們的計算機上沒有Laravel安裝程序的人,可使用composer來建立一個新的Laravel項目。windows

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表。bash

php artisan migrate
複製代碼

遷移咱們的數據庫後,咱們應該看到相似的信息 服務器

1

2. 填充咱們的數據庫

默認狀況下,Laravel提供了一個模型工廠model factory咱們可使用它來爲咱們的數據庫建立種子。app

如今讓咱們開始使用Tinker。composer

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框架填充中文數據測試數據

相關文章
相關標籤/搜索