如何使用自定义工匠命令从数据库中打印一行

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-&gt;line($user[0]-&gt;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 
    

【讨论】:

以上是关于如何使用自定义工匠命令从数据库中打印一行的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行预定义的工匠命令时忽略控制台命令

无法在工匠自定义命令 Laravel 5.4 中获取模型关系

Laravel工匠错误:processutils

如何使用 Laravel 获取列的默认值?

在 Lumen 中使用验证器进行工匠命令

如何在Laravel 5.4中使用ask()测试工匠命令