如何使用自定义工匠命令从数据库中打印一行
Posted
技术标签:
【中文标题】如何使用自定义工匠命令从数据库中打印一行【英文标题】:how to print a row from the database using custom artisan command 【发布时间】:2019-07-11 01:33:58 【问题描述】:我正在尝试使用 Laravel 中的自定义工匠命令从第二个数据库中获取一行。现在我想打印查询结果,但我不断收到错误消息。我将不胜感激任何帮助。
我设置了与两个数据库的连接,它们已连接并正常运行。我正在使用的表称为 person 并包含多个列,例如 name、surname、person_id(这是自动增量和主键)和 ssn。我还创建了一个自定义工匠命令,在使用时从数据库中获取一行
php artisan import-users:DB 12345678
和查询
DB::connection('mysql2')->select('SELECT * FROM person WHERE ssn=?', [$ssn])
查询的结果被放置在变量 $user 中,现在我只想将它打印出来,但我不断收到错误。这是我尝试过的
$name = $user['name'];
这给出了
ErrorException:未定义的索引:名称
$this->line($user[0]);
这给出了
ErrorException : 类 stdClass 的对象无法转换为字符串
$this->line($user->name);
这给了
ErrorException : 试图获取非对象的属性“名称”
我也尝试了很多东西,但没有任何效果。再次感谢
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use DB;
class ImportUsers extends Command
protected $signature = 'import-users:DB ssn';
protected $description = 'import users from old database';
public function __construct()
parent::__construct();
public function handle()
$ssn = $this->argument('ssn');
$user = DB::connection('mysql2')->select('SELECT * FROM person WHERE
ssn=?', [$ssn]);
$this->line($user->name);
$this->info($ssn.' Done');
【问题讨论】:
可以分享$user
的内容吗? (var_dump)
试试$this->line($user[0]->name)
$this->line($user[0]->name) 确实有效。谢谢:)
【参考方案1】:
这样使用
for signle row
public function handle()
$ssn = $this->argument('ssn');
$user = DB::connection('mysql2')->select('SELECT * FROM person WHERE
ssn=? limit 1', [$ssn]);
if(isset($user[0]))
$this->line($user[0]->name);
$this->info($ssn.' Done');
$this->table($headers, $newUsers);
对于多行(数组)
public function handle()
$ssn = $this->argument('ssn');
$user = DB::connection('mysql2')->select('SELECT * FROM person WHERE
ssn=?', [$ssn]);
//$userNameArray = []; //if you want to show name in table
if(count($user) > 0)
foreach($user as $item)
$this->line($item->name);
//$userNameArray[] = $item->name;
$this->info($ssn.' Done');
//$this->table(['Name'],$userNameArray); //optionall
【讨论】:
以上是关于如何使用自定义工匠命令从数据库中打印一行的主要内容,如果未能解决你的问题,请参考以下文章