Laravel Artisan控制台命令无法检索模型集合

时间:2016-11-16 15:49:05

标签: laravel-5 console eloquent laravel-5.3 artisan

我试图通过我使用Artisan创建的自定义控制台命令来做一些逻辑,但我无法使用我的模型类和使用Eloquent进行查询。

当我使用MyModel :: all()时,它将返回集合中的所有记录。这很好,除了我使用的模型有太多的记录将所有这些记录加载到内存中。

我正在尝试使用

  MyModel::where('id',$currentLoopId)->get();

这会返回一个空集合:(

我的控制台类如下:

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\ProcessReferral;
use App\TargetUrl;
use App\Website;

class ProcessReferrals extends Command
{
  /**
   * The name and signature of the console command.
   *
   * @var string
   */
  protected $signature = 'process:referrals';

  /**
   * The console command description.
   *
   * @var string
   */
  protected $description = 'Process all outstanding records in process_referrals table';

  protected $logArray = [];
  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct()
  {
    parent::__construct();
  }

  /**
   * Execute the console command.
   *
   * @return mixed
   */
  public function handle()
  {
    $this->info('Start Processing Referrals');

    $process_referrals = ProcessReferral::all();        
    $referral_count = count($process_referrals);

    $this->info('Found '.$referral_count.' referral(s) that need processed');


    foreach($process_referrals as $referral){

        ## 1. SEE IF REFERRAL WEBSITE IS ACTIVE AND VERIFIED IN AFFILIATE_WEBSITES. LOAD LAST FORCE UPDATE REFRESH CODES
        ########################################

        $this->info('Processing Referral ID: '.$referral->id);
        $this->info('Get Website from Affiliate Website Id: '.$referral->affiliate_website_id);

        $websites = Website::where('id','=',$referral->affiliate_website_id)->get();
        dd($websites);

        ... ( more Logic after I get website )

    }
}

我的模型类如下:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Website extends Model
{

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'affiliate_websites';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        ...
    ];

    ... ( Eloquent Relations )
}    

数据库表:

id  website_label   referrals
------------------------------
1   Google UK       920685
2   Google U.S.     2940884
3   Google Germany  709603

正在处理的第一张虚拟数据记录:

id  affiliate_website_id
-------------------------
2   3   

终端上的输出

$ php artisan process:referrals
Start Processing Referrals
Found 300 referral(s) that need processed
Processing Referral ID: 2
Get Website from Affiliate Website Id: 3
Website(id->62) is Active.
Illuminate\Database\Eloquent\Collection {#901
  #items: []
}

我尝试了一些不同的查询方式,包括DB :: select(),它返回我要查找的内容但是我无法动态设置我正在使用该约定搜索的id。

我的模型适用于我的应用程序中的其他任何地方,我认为存在某种Namespacing问题,但我完全不知道为什么它不起作用。

任何帮助都将非常感谢!

1 个答案:

答案 0 :(得分:0)

@machuga在http://laravel.io/chat

指出

我检查了我传递的ID是否为整数

  $website = Website::where('id',(int)$referral->affiliate_website_id)->first();

仍然有一些问题,但使用 - > first()获取单个记录而不是 - > get()所以我不必循环遍历网站集