3

メーリング リストを CSV からデータベースにインポートしようとしています。私のLaravelには、これを行う責任がある2つのモデルがあります:TargetおよびMailing(1つTargetは多くMailingのsを持っています)

Beanstalkd で Queue システムを使用しています。私は使用しています:

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 [] []

しかし、データベースにレコードが追加されません。ジョブ内でモデルをどのように使用すればよいですか? たとえば、コントローラーで既にテストしましたが、すべて正常に動作します

4

1 に答える 1

4

他のエラーが表示されないので、これは環境の問題だと思います。

最初 - 環境

への呼び出しphp artisan queue:listen(またはqueue:work、該当する場合は ) が正しい環境を使用していることを確認して、正しいデータベースが使用されるようにします。

$ php artisan queue:listen --env=YOUR_ENV

詳細については、Laravel 4 でのキューの設定に関する投稿を参照してください。

2 番目 - 名前空間

(どうやら?) PHP エラーが表示されていないため、可能性は低くなりますが、別のアイデア:

クラスがネームスペース化されている場合、\キャラクターを使用して、グローバルネームスペースにあるモデルを取得する必要がある場合があります。

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

// To:
$mailing = new \Mailing();
于 2013-09-11T13:13:20.763 に答える