代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Souza

如何在Laravel队列中使用模型

  •  3
  • Rodrigo Souza  · 技术社区  · 12 年前

    我正试图将一个邮件列表从CSV导入到我的数据库中。我的Laravel有两个模型,负责做到这一点: Target Mailing (一 目标 有很多 邮寄 s)

    我正在使用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 [] []
    

    但我的数据库中没有添加任何记录。我应该如何在工作中使用模型?例如,我已经在控制器中测试过了,一切都很好

    1 回复  |  直到 12 年前
        1
  •  4
  •   fideloper    12 年前

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

    第一-环境

    请确保您的电话 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();