我正在尝试使用Laravel中的自定义artisan命令从第二个数据库中获取一行。现在我想打印查询的结果,但我一直收到错误消息。我将不胜感激任何帮助。
我设置了与两个数据库的连接,它们已连接并正常运行。我正在使用的表称为人员,包含多个列,例如名称,姓氏,person_id (这是自动递增和主键)和ssn。我还创建了一个自定义artisan命令,该命令在使用
时从数据库中获取一行 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');
}
}
答案 0 :(得分: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
}