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 { /*...*/ }