【问题标题】:How to use Models in a Laravel Queue如何在 Laravel 队列中使用模型
【发布时间】:2013-09-10 21:16:27
【问题描述】:

我正在尝试将邮件列表从 CSV 导入我的数据库。我的 Laravel 中有两个模型负责执行此操作:TargetMailing(一个 Target 有很多 Mailings)

我正在使用 Beanstalkd 的队列系统。我正在使用:

Queue::push('ImportCSV', array(
            'file' => $file->getClientOriginalName(),
            'target' => $name
    ));

推送我的工作,然后我有 ImportCSV 工作类:

class ImportCSV
{
public function fire($job, $data) 
{   
    Log::info("Starting to add {$data['target']} to database");

    $target = new Target();
    $target->name = $data['target'];
    $target->save();

    $reader = new \EasyCSV\Reader($data['file']);

    // There must be a Email field in CSV file
    /*if(!in_array('Email', $reader->getHeaders() ))
        throw new Exception("Email field not found", 1);*/

    while ($row = $reader->getRow())
    {
        $mailing = new Mailing();
        $mailing->target()->associate($target);
        $mailing->email = $row['Email'];
        $mailing->save();
    }

    Log::info("Mailing list {$target->name} added to database");

    $job->delete();
}
}

自从我在日志文件中收到这些消息后,所有代码似乎都在工作

[2013-09-10 21:03:25] log.INFO: Starting to add TEst to database [] []
[2013-09-10 21:03:25] log.INFO: Mailing list TEst added to database [] []

但没有记录添加到我的数据库中。我应该如何在工作中使用模型?例如,我已经在控制器中对其进行了测试,一切正常

【问题讨论】:

  • 没有其他错误吧?您的 ImportCsv 类是否已命名空间?

标签: php queue laravel beanstalkd


【解决方案1】:

由于您没有看到其他错误,我认为这是环境问题。

首先 - 环境

确保您对php artisan queue:listen(或queue:work,如果适用)的调用使用正确的环境,以便使用正确的数据库:

$ php artisan queue:listen --env=YOUR_ENV

这是setting up queues in Laravel 4 上的帖子,可能有助于了解更多信息。

第二 - 命名空间

由于您(显然?)没有看到任何 PHP 错误,这不太可能,但另一个想法:

如果您的类是命名空间的,您可能需要使用\ 字符来获取您的模型,这些模型位于全局命名空间中。

// From:
$mailing = new Mailing();

// To:
$mailing = new \Mailing();

【讨论】:

  • 正确!这是 ENV 问题
猜你喜欢
  • 2017-07-09
  • 2016-06-05
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多