之前保存播种期间未调用



beforeSave()应该在播种期间调用吗?

我的模型表中的 beforeSave() 方法当前在我浏览应用程序(在编辑和添加中(时被调用,因为预期字段在表单提交后会更新。

但是,当我在截断表后为数据库设定种子时,这些相同的字段仍保持其默认值。

种子:

public function run()
{
    $data = [
            ['season_id'=>1, 'league_id'=>1, 'game_date'=>'2017-01-01', 'game_type_id'=>2, 'user_pt'=>1, 'opponent'=>'Vancouver', 'opponent_pt'=>2, 'is_decision'=>1, 'mins'=>60, 'ga'=>2, 'sog'=>24],
            ['season_id'=>1, 'league_id'=>1, 'game_date'=>'2017-01-02', 'game_type_id'=>2, 'user_pt'=>2, 'opponent'=>'Vancouver', 'opponent_pt'=>1, 'is_decision'=>1, 'mins'=>59, 'secs'=>45, 'ga'=>1, 'sog'=>27],
            ['season_id'=>1, 'league_id'=>1, 'game_date'=>'2017-01-03', 'game_type_id'=>2, 'user_pt'=>4, 'opponent'=>'Vancouver', 'opponent_pt'=>1, 'is_decision'=>1, 'mins'=>60, 'ga'=>1, 'sog'=>19],
            ['season_id'=>1, 'league_id'=>1, 'game_date'=>'2017-01-04', 'game_type_id'=>2, 'user_pt'=>5, 'opponent'=>'Edmonton', 'opponent_pt'=>2, 'is_decision'=>1, 'mins'=>58, 'secs'=>24, 'ga'=>1, 'sog'=>19],
            ['season_id'=>1, 'league_id'=>1, 'game_date'=>'2017-01-05', 'game_type_id'=>2, 'user_pt'=>3, 'opponent'=>'Calgary', 'opponent_pt'=>4, 'is_decision'=>1, 'mins'=>59, 'secs'=>10, 'ga'=>1, 'sog'=>19],
    ];
    $table = $this->table('games');
    $table->insert($data)->save();
}

之前保存

// In a table or behavior class
public function beforeSave($event, $entity, $options)
{
    // calculate record if part of decision
    if (isset($entity->is_decision) && $entity->is_decision == 1){
        //reset
        $entity->l = 0;
        $entity->w = 0;
        $entity->t = 0;
        $entity->otl = 0;
        $entity->is_shutout = 0;

        //calculate result of game
        if($entity->is_overtime == 0){
            //loss
            if($entity->opponent_pt > $entity->user_pt)
                $entity->l = 1;
            elseif($entity->opponent_pt < $entity->user_pt)
                $entity->w = 1;
            //tie
            elseif($entity->opponent_pt = $entity->user_pt)
                $entity->t = 1;
        }
        else{
            //ot loss
            if($entity->opponent_pt > $entity->user_pt)
                $entity->otl = 1;
        }
        //calculate shutout
        if($entity->opponent_pt == 0)
            $entity->is_shutout = 1;
        $entity->abs_game_time = 0;
        //calculate absolute game time
        if(isset($entity->mins) && is_numeric($entity->mins) && $entity->mins > 0)
        {
            if(isset($entity->secs) && is_numeric($entity->secs) && $entity->secs > 0){
                 $entity->abs_game_time = ($entity->mins * 60 + $entity->secs)/60;
            }
            else 
                $entity->abs_game_time = $entity->mins;
        }
    }
}

编辑 #1

更新的代码片段,仍然不行

这行不通,因为种子不使用蛋糕ORM。

use PhinxDbTable as BaseTable;
class Table extends BaseTable { /*...*/ }

最新更新