0

この場合、3 つのテーブルがあります。

tasks (task_id, task_title,task_type)
managers (manager_id, manager_title, manager_type)
assigners (task_id, manager_id)

にはTaskController.php、新しいタスクを作成するストア メソッドがあります。

public function store() {  
    $input = Input::all();
    $this->task->create($input);
     return Redirect::route('tasks.index');}

これが私が達成したいことです:

  1. 新しく作成されたタスクの値を eventtask.createdに渡します。
  2. 新しいタスクのタイトル$task->task_titleを any と比較し、$manager->manager_title一致するものが見つかった場合 ( $task->task_titleLIKE $manager->manager_title)、一致した$task->task_idand$manager->manager_idを配列として別のイベントに渡します。
  3. start/global にあるイベント リスナーでは、ステップ 2 から受け取った値を使用して assigners テーブルに新しいレコードが作成されます。イベント リスナーは次のように記述されます。

    Event::listen('task.created',function($param1,$param2){  
        $new_assigner = new Assigner;  
        $assigner->task_id = $param1;  
        $assigner->manager_id = $param2;  
        $new_assigner->save();  
    });
    

私の質問:

  1. ステップ 1 でイベントを発生させる場所 (TaskController?) と、渡す値として使用する必要のあるパラメーター ($this->task?)
  2. ステップ2を達成するには?(複数の一致が見つかった可能性があります)
4

1 に答える 1

2
  1. 新しく作成したタスクが必要なので、タスクが作成された後である必要があります。この行の後かもしれません。新しく作成したタスクをそのまま渡すか、task_id を渡してイベント リスナーにフェッチすることができます。しかし、あなたは最初にタスクをつかみました。

    $task = $this->task->create($input);
    Event::fire('task.created', array($task) );
    
  2. ループごとに使用します。

    Event::listen('task.created', function($task)
    {
        $managers = getManagersForThisTask($task);
    
        foreach($managers as $manager ){
            Event::fire('task.created_step2', $task, $manager );
        }
    });
    
于 2013-08-08T17:52:38.477 に答える