Php Laravel Artisan路由:调用抛出MySQL错误

Php Laravel Artisan路由:调用抛出MySQL错误,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我正在使用Artisan通过命令行调用Laravel 5 Route。我按照本文中的说明创建了一个命令行控制器: 在web浏览器中导航到此路线时,我没有收到任何错误。此路由通过使用我创建的名为Ticker的模型执行API调用并将数据插入MySQL数据库 当我可以从CLI调用路由时,如下所示: $ php artisan route:call /d17059dfce4c09ef5e437b1d9455f7c6 我得到一个Laravel错误(其中truncate'tickers'是路由调用的控制器

我正在使用
Artisan
通过命令行调用
Laravel 5 Route
。我按照本文中的说明创建了一个命令行控制器:

在web浏览器中导航到此路线时,我没有收到任何错误。此路由通过使用我创建的名为
Ticker
模型执行API调用并将数据插入MySQL数据库

当我可以从CLI调用路由时,如下所示:

$ php artisan route:call /d17059dfce4c09ef5e437b1d9455f7c6
我得到一个
Laravel
错误(其中
truncate'tickers'
是路由调用的控制器中执行的第一个SQL命令,
tickers
是数据库中的表),说明:

SQLSTATE[HY000] [2002] No such file or directory (SQL: truncate `tickers`)
因为我似乎只是在通过命令行执行此路由时出错,这让我相信命令行脚本
App\Console\Commands\CallRoute.php
一定有问题,如下所示:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Http\Requests;

class CallRoute extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'route:call {uri}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'php artsian route:call /route';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $request = Request::create($this->argument('uri'), 'GET');
        $this->info(app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle($request));
    }
}

您应该将
/d17059dfce4c09ef5e437b1d9455f7c6作为选项而不是参数传入。它将其解释为一个目录

php artisan route:call --uri=/d17059dfce4c09ef5e437b1d9455f7c6
更新命令签名以包括
uri
选项:

protected $signature = 'route:call {--uri=}';
命令:

class CallRoute extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'route:call {--uri=}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'php artsian route:call /route';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $request = Request::create($this->option('uri'), 'GET');
        $this->info(app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle($request));
    }
}

试着看看这个问题

当我的php-cli与mysql的连接出现问题时,我遇到了类似的问题,而我的php-fpm工作正常(这也可能是在浏览器中导航到此路径时没有出现错误的原因)。我必须在php cli配置中启用mysql pdo扩展

只要在控制台中运行
php-v
,如果您看到类似的内容:

PHP 7.2.1 (cli) (built: Jan  8 2018 23:39:24) ( NTS )

这可能意味着您必须为PHPCLI启用pdo支持

也许您的意思是说
截断表标识符
?您是否要扔掉该表中的所有内容?

php artisan
命令创建和命令类对象(您创建的自定义命令)。这是为了获取可用命令和选项的列表


您可能已经添加了数据库查询(
truncate table tickers
)任何命令文件构造函数(
\uu construct()

该错误通常与您的mysql连接有关当我发出该命令时,我得到以下错误:
the“-uri”选项不存在。
您需要在命令的签名中定义
uri
。我会更新答案。很奇怪,但现在错误切换到:
“uri”参数不存在
更新
handle
方法以使用
$this->option('uri')
而不是
$this->argument()
现在解决了有关
uri
的错误,但是我回到了我的OP中声明的原始错误,我的数据库仍然没有更新。我在
/Applications/MAMP/bin/php/php7.2.1/conf/php.ini
中找到了MAMP的php cli配置,并为
extension=pdo_mysql添加了一行。因此
但我在尝试执行cli命令时仍然收到相同的错误老实说,我不知道我做了什么来修复它,但它现在已经修复了。我尝试更改了几项内容,并清除了artisan配置缓存及其工作状态。我已经开始删除/取消执行我一个接一个尝试过的修复,现在我又回到了原点,但它仍在工作……我扔掉了表中的所有内容,但我OP中的语法不是实际使用的语法;我正在使用一个拉威尔模型来执行计算错误显示的操作。同样,在web浏览器中,一切都可以正常工作,只是不能通过CLI。无论如何,这个问题现在已经解决了。