如何使用定制artisan命令从数据库中打印一行

时间:2019-02-17 14:27:01

标签: php arrays database laravel artisan

我正在尝试使用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');
    }
}

1 个答案:

答案 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 
    }