public function testPersist() { $db = new Persistence_SQL($this->db->connection); $a = ['item' => [1 => ['id' => 1, 'name' => 'John', 'surname' => 'Smith']]]; $this->setDB($a); $m = new Model($db, 'item'); $m->addField('name', ['never_persist' => true]); $m->addField('surname', ['never_save' => true]); $m->load(1); $this->assertNull($m['name']); $this->assertEquals('Smith', $m['surname']); $m['name'] = 'Bill'; $m['surname'] = 'Stalker'; $m->save(); $this->assertEquals($a, $this->getDB()); $m->reload(); $this->assertEquals('Smith', $m['surname']); $m->getElement('surname')->never_save = false; $m['surname'] = 'Stalker'; $m->save(); $a['item'][1]['surname'] = 'Stalker'; $this->assertEquals($a, $this->getDB()); $m->addHook('beforeSave', function ($m) { if ($m->isDirty('name')) { $m['surname'] = $m['name']; unset($m['name']); } elseif ($m->isDirty('surname')) { $m['name'] = $m['surname']; unset($m['surname']); } }); $m['name'] = 'X'; $m->save(); $a['item'][1]['surname'] = 'X'; $this->assertEquals($a, $this->getDB()); $this->assertNull($m['name']); $this->assertEquals('X', $m['surname']); $m['surname'] = 'Y'; $m->save(); $this->assertEquals($a, $this->getDB()); $this->assertEquals('Y', $m['name']); $this->assertEquals('X', $m['surname']); }