今天咱們將討論如何使用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
複製代碼
安裝咱們的演示Laravel項目後,咱們須要建立一個數據庫並設置遷移。對於本文咱們將使用默認的Laravel遷移。所以咱們將.env
文件配置爲指向您爲此測試建立的數據庫。默認遷移包括建立一個users
表和一個password_resets
表。bash
php artisan migrate
複製代碼
遷移咱們的數據庫後,咱們應該看到相似的信息 服務器
默認狀況下,Laravel提供了一個模型工廠model factory咱們可使用它來爲咱們的數據庫建立種子。app
如今讓咱們開始使用Tinker。composer
php artisan tinker
複製代碼
這條命令會打開一個 REPL 窗口供咱們使用。剛纔咱們已經執行過 migration, 如今咱們能夠直接在 REPL 中使用模型工廠來填充數據。
factory(App\User::class, 10)->create();
複製代碼
十個新用戶的集合應顯示在您的終端上。而後咱們能夠檢查數據庫以查看用戶是否真正建立。
App\User::all();
複製代碼
爲了讓咱們的數據庫中的用戶總數,咱們能夠直接調用count
的User
模型。
App\User::count();
複製代碼
在執行完 App\User::all()
和 App\User::count()
以後,個人輸出是這個樣子的,大家的輸出應該和我差很少,僅僅是生成的內容不一樣。
經過 REPL,咱們還能夠建立一個新用戶。你應該已經注意到,咱們在 REPL 使用的命令跟咱們在 laravel 中所寫的代碼是同樣的。因此建立一個新用戶的代碼:
$user = new App\User;
$user->name = "imax";
$user->email = "imax@gmail.com";
$user->password = bcrypt("12345");
$user->save();
複製代碼
如今輸入 $user,能夠看到
要刪除 id 爲 1 的用戶:
$user = App\User::find(1);
$user->delete();
複製代碼
經過 tinker,你能夠在 REPL 中查看某個 類/方法 的註釋文檔。可是文檔內容取決於這個 類/方法 是否有一個文檔註釋塊(DocBlocks)。
doc <functionName> # replace <functionName> with function name or class FQN
複製代碼
好比,查閱 dd
的註釋文檔
咱們還能夠在repl
使用過程當中檢查一個函數或類的源代碼
show <functionName>
複製代碼
例如,調用show在dd此給咱們。
Laravel Tinker是一款工具,能夠幫助咱們輕鬆地與咱們的應用程序進行交互,而無需啓動本地服務器。想一想你想從你的項目中刪除的幾行文字中測試一個簡單的功能,只須要使用php artisan tinker
就能夠了。
若是你用的是Laravel的5.3的版本, 想要插入中文的測試數據,會發生以下的報錯信息
解決辦法
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();
複製代碼
再次驗證一下
$user = new App\User();
$user->name = "大熊貓";
複製代碼
cmd
終端Tinker
中文亂碼的問題# 將終端改爲UTF8字符
先輸入 CHCP 65001
而後打開【屬性】,將字體改成【Lucida Console】
複製代碼
// 在User模型設置修改器
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
複製代碼
通常後臺管理平臺,都是禁用掉註冊功能的。 那怎麼添加一個管理員帳號呢。
參考步驟三其實就能夠了。
不過除了使用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框架填充中文數據測試數據