我目前正在 Laravel 5.1 项目中创建一个 php artisan 控制台命令,并想从我的控制台命令中调用另一个控制台命令。我想调用的这个第三方命令不接受任何选项或参数,而是通过交互式问题接收其输入。
我知道我可以调用带有选项和参数的命令,如下所示:
$this->call('command:name', ['argument' => 'foo', '--option' => 'bar']);
我也知道我可以从命令行调用交互式命令而无需像这样的交互:
php artisan 命令:名称 --no-interaction
但是我怎样才能在我的命令中回答这些交互式问题呢?
我想做类似下面的事情(伪代码)。
$this->call('command:name', [
'argument' => 'foo',
'--option' => 'bar'
], function($console) {
$console->writeln('Yes'); //answer an interactive question
$console-writeln('No'); //answer an interactive question
$console->writeln(''); //skip answering an interactive question
} );
Run Code Online (Sandbox Code Playgroud)
当然,以上不起作用,因为$this->call($command, $arguments)不接受第三个回调参数。
从控制台命令调用控制台命令时如何回答交互式问题?
我试图通过共享网络共享我的 Laravel 项目,使用;
php artisan serve --host 192.168.X.XXX --port 8000
这有效并且不会产生任何错误,但我仍然无法在连接到同一 wifi 网络的其他机器上访问我的应用程序,使用我的 Mac 的 IP 地址进行连接。
我尝试了不同的端口并更改了我的 Mac 的 IP 地址以尝试修复它,但到目前为止没有任何效果。
知道是什么导致了这个问题吗?任何建议将不胜感激,谢谢!
我正在尝试通过工匠迁移创建 MySQL 触发器。
DB::unprepared('
DELIMITER $$
CREATE TRIGGER cascade_courseAffinity_after_facultyAffinity
AFTER DELETE ON faculty_affinities
FOR EACH ROW
BEGIN
DELETE ca
FROM course_affinities AS ca
JOIN courses AS course1 ON ca.course1_id = course1.id
JOIN courses AS course2 ON ca.course2_id = course2.id
WHERE (course1.faculty_id = OLD.faculty1_id OR course1.faculty_id = OLD.faculty2_id)
AND (course2.faculty_id = OLD.faculty1_id OR course2.faculty_id = OLD.faculty2_id);
END
$$
');
Run Code Online (Sandbox Code Playgroud)
然而,当我运行迁移时,我收到错误
SQLSTATE[]: Syntax error... near DELIMITER $$ at line 1
Run Code Online (Sandbox Code Playgroud)
帮助他人?
编辑1:这是我在 MySQL 上使用的迁移文件
创建与教师 (faculty_id) 具有一对多关系的“课程”表。
Schema::create('courses', function (Blueprint $table) { …Run Code Online (Sandbox Code Playgroud) mysql migration database-migration laravel-5 laravel-artisan
我有以下功能:
protected function schedule(Schedule $schedule)
{
$schedule->command('email:users')->everyMinute();
}
Run Code Online (Sandbox Code Playgroud)
当我运行命令时
artisan schedule:run
Run Code Online (Sandbox Code Playgroud)
它会发送一封电子邮件,但是当我将以下命令作为 cron 作业添加到 cpanel 时,它不会发送任何电子邮件。Cpanel 假设在运行 cron 作业时通过电子邮件向我发送通知,但我没有收到一封电子邮件。
php /home/rain/artisan schedule:run 1>> /dev/null 2>&1
我哪里做错了?
此外,当我运行命令时,artisan schedule:run它只运行一次。我很好奇,->everyMinute();如果不是每分钟都运行一次,为什么我必须添加?如果我想每周发送一次,我可以设置 cron 作业。->weekly();如果 cron 作业每周发送它,为什么我必须编写添加函数?
我见过很多人在尝试运行任何 php artisan 命令时遇到错误,但我什么也没得到 - 我尝试运行的任何命令都会保持运行/冻结状态,直到我按 ctrl + c 退出为止。关于调试这个有什么技巧吗?我很茫然...
php command-line-interface laravel laravel-5.4 laravel-artisan
我的迁移失败了,所以我只是在 MySQL Workbench 中手动运行了一个查询。
是否有工匠命令将迁移标记为完成?因此,当我运行未来的迁移时,它会跳过我知道不需要运行的迁移。
我可以使用此命令列出它们及其状态,并查看哪些已运行,哪些未运行:
php artisan migrate:status
Run Code Online (Sandbox Code Playgroud)
如果没有命令,我可能可以手动将条目插入到数据库迁移表中。(但目前没有迁移:P)
我想我也可以...删除迁移。
我正在与 Laravel 合作,
突然,当我尝试php artisan serve在命令提示符下运行时,
它显示错误消息:
In Container.php line 729: Class request does not exist
Run Code Online (Sandbox Code Playgroud)
我查看了所有控制器、模型和其他我能想到的松散请求引用的文件,但什么也没找到。
我该如何调试这个?
安装新的 Laravel 应用程序 5.7 并尝试迁移后,出现此错误:
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法(SQL:select * from information_schema.tables where table_schema = xxx_db and table_name = migrations)
在 C:\xampp\htdocs\xxxxx\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664 660| // 如果尝试运行查询时发生异常,我们将格式化错误 661| // 包含与 SQL 的绑定的消息,这将使此异常成为 662| // 对开发人员更有帮助,而不仅仅是数据库的错误。663| 捕获(异常 $e){
664| throw new QueryException(665| $query, $this->prepareBindings($bindings), $e 666|); 667| 第668话
异常跟踪:
1 PDOException::("PDO::__construct(): 服务器请求了客户端未知的身份验证方法 [caching_sha2_password]") C:\xampp\htdocs\xxxxx\vendor\laravel\framework\src\Illuminate\Database\Connectors\连接器.php:70
2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=xxx_db", "root", "**********", []) C:\xampp\htdocs \xxxxx\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
请使用参数 -v 查看更多详细信息。
在以前的版本中,您可以使用 artisan 命令
php artisan app:name NewName
Run Code Online (Sandbox Code Playgroud)
使用更改应用程序命名空间(默认为 App)。工匠命令现在似乎消失了。不再支持更改命名空间吗?
我是 Laravel 的新手。我正在开发 laravel 版本 6。我已经创建了迁移。它第一次运行得很好,但是如果我更改迁移文件中的某些内容然后运行php artisan migrate它会显示nothing to migrate. 我php artisan migrate --path也尝试过,但它不起作用。为了使其工作,我必须删除迁移文件并重新创建它。我不想用php artisan migrate:fresh。
我应该怎么做才能只运行一个已更改的迁移文件?