欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

使用 Php Artisan Tinker 来调试你的 Laravel 学院君 有大用

使用 Php Artisan Tinker 来调试你的 Laravel

本文翻译自:Tinker with the Data in Your Laravel Apps with Php Artisan Tinker

今天,我们将通过介绍 Laravel 中一个不太为人所知的功能,来展示如何快捷的调试数据库中的数据。通过使用 Laravel artisan 内建的 php artisan tinker, 我们可以很方便的看到数据库中的数据并且执行各种想要的操作。

Laravel artisan 的 tinker 是一个 REPL (read-eval-print-loop),REPL 是指 交互式命令行界面,它可以让你输入一段代码去执行,并把执行结果直接打印到命令行界面里。

如何简便快捷的查阅数据库数据?

我想最好的方式应该是输入下面这些熟悉的命令,然后立马能看到结果:

// 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 installer,那么先执行:

laravel new ScotchTest

没有安装 Laravel installer 的电脑,可以通过 composer 来创建这个项目

composer create-project laravel/laravel ScotchTest --prefer-dist

初始化数据库: Running Migrations

创建完我们的测试项目(ScotchTest)后,我们还需要新建一个测试数据库并且执行数据库迁移(migrations)来初始化数据库。在本文的讲解中,我们直接使用 Laravel 默认的迁移就够了。首先在 .env 文件中配置好数据库连接信息,然后准备执行迁移,默认的迁移会帮我们生成一个 users 表和一个 password_resets 表。

php artisan migrate

当迁移完成的时候,我们应该可以看到类似这样的信息:

1


填充我们的数据库

通常情况下,我们可以使用 Laravel 的模型工厂(model factory)来快速填充我们的数据库,它可以帮我向数据库插入伪数据方便我们测试。现在让我们开始使用 tinker 吧。

php artisan tinker

这条命令会打开一个 REPL 窗口供我们使用。刚才我们已经执行过 migration, 现在我们可以直接在 REPL 中使用模型工厂来填充数据。

factory(App\User::class, 10)->create();

这个时候,一个包含了 10 条新用户记录的集合将在你的终端上打印出来。现在我们可以检查一下这些记录是否真的已经被创建了。

App\User::all();

使用 count 方法,还可以查看 User 模型在数据库中一共有多少个 user 。

App\User::count();

在执行完 App\User::all() 和 App\User::count() 之后,我的输出是这个样子的,你们的输出应该和我差不多,仅仅是生成的内容不同。

2


创建一个新用户

通过 REPL,我们还可以创建一个新用户。你应该已经注意到,我们在 REPL 使用的命令跟我们在 laravel 中所写的代码是一样的。所以创建一个新用户的代码:

$user = new App\User;
$user->name = "Wruce Bayne";
$user->email = "iambatman@savegotham.com";
$user->save();

现在输入 $user,可以看到

3


删除一个用户

要删除 id 为 1 的用户:

$user = App\User::find(1);
$user->delete();

查阅某个 类/方法 的注释文档

通过 tinker,你可以在 REPL 中查看某个 类/方法 的注释文档。但是文档内容取决于这个 类/方法 是否有一个文档注释块(DocBlocks)。

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

比如,查阅 dd 的注释文档

4


查看源码

我们还可以直接在 REPL 中打印出某个 类/方法 的源代码

show <functionName>

比如,查看 dd 的源码

5


总结

Laravel Tinker 是一款让我们可以更方便调试 laravel 的工具,有了它,没有必要再为了一个简单的调试而开启本地服务(server)。特别是当你想要测试一小段代码的时候,你无需再插入各种 var_dump 和 die,然后还要在调试完后删掉它们,你只需要 php artisan tinker 就够了。

原文地址:https://yii.im/post/tinker-with-the-data-in-your-laravel-apps-with-php-artisan-tinker/

ichou

ichou has written 1 articles

该作者很低调,还没有自我介绍~

积分:190 等级:P3 职业:未设置 城市:未设置

10 条回复

  1. jackson jackson says:
    在model里没有配置表的相关信息,tinker怎么知道他要对哪个表做操作呢
  2. birjemin birjemin says:
    我们还可以直接在 REPL 中打印出某个 类/方法 的源代码 这句话表意错误,应当是某函数和某个类,方法打印不出来的
  3. Sam Sam says:
    Tinker 如何退出呢? 我是新手 -_-
  4. 排骨 排骨 says:
    在git bash里会中文乱码
  5. 周小虫 周小虫 says:
    @ 疯人院 tinker 里面,你必须在一个代码块里才能换行 比如 { echo 1; echo 2; //这里面可以换行}不然就会直接执行
  6. 排骨 排骨 says:
    请问在tinker模式里怎么换行
  7. 周小虫 周小虫 says:
    @ xl 其实我也喜欢 xdebug 哈哈哈~~不过相比起来,我还是更喜欢 命令行这种,大概是因为 习惯 Ruby 的 irb 了 相比 xdebug, tinker 还是有自己的优势的1. 开箱即用,0 配置,不分环境,只要是 laravel 的项目就有2. xdebug 是运行时调试,加载的环境是某次请求了环境;tinker 只是加载了应用主体3. tinker 除了用于调试,还提供了一种非常便宜的数据热修复方案,你可以用它去修复数据,因为模型中可能有很多关联,所以肯定比直接改数据库安全多了4. tinker 目前还没有断点调试的支撑,所以就追 bug 的能力,远不如 xdebug

登录后才能进行评论,立即登录?


来自  https://laravelacademy.org/post/4935.html

普通分类: