代码之家  ›  专栏  ›  技术社区  ›  Red Eyez

如何使用自定义Artisan命令从数据库打印行

  •  0
  • Red Eyez  · 技术社区  · 6 年前

    我正试图从第二个数据库中获取一行,使用laravel中的自定义Artisan命令。现在我想打印查询的结果,但是我一直得到一个错误。我很感激你的帮助。

    我设置连接到 两个数据库 它们连接起来,运行起来没有问题。我使用的表名为person,包含多个列,如 姓名、姓氏、身份证 (自动递增和主键)和ssn。我还创建了一个自定义Artisan命令,在使用

    php artisan import-users:DB 12345678

    以及询问

    DB::connection('mysql2')->select('SELECT * FROM person WHERE ssn=?', [$ssn])

    查询的结果被放在变量$user中,现在我只想打印出来,但是我总是得到错误。这是我试过的

    $name = $user['name']; 
    

    它给了

    错误异常:未定义索引:名称

    $this->line($user[0]);
    

    它给了

    错误异常:类stdclass的对象无法转换为字符串

    $this->line($user->name);
    

    它给了

    错误异常:试图获取非对象的属性“name”

    我也试过很多东西,但都没用。再次感谢

    <?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 回复  |  直到 6 年前
        1
  •  1
  •   Jignesh Joisar    6 年前

    像那样使用

    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 
        }