使用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框架填充中文数据测试数据

相关文章
相关标签/搜索