dont update entity and dont run an update query if an entity wasnt changed at all
This commit is contained in:
parent
309aa3bcd2
commit
5199e4508a
4 changed files with 33 additions and 2 deletions
|
@ -92,6 +92,9 @@ abstract class Entity {
|
|||
protected function setter($name, $args) {
|
||||
// setters should only work for existing attributes
|
||||
if(property_exists($this, $name)){
|
||||
if($this->$name === $args[0]) {
|
||||
return;
|
||||
}
|
||||
$this->markFieldUpdated($name);
|
||||
|
||||
// if type definition exists, cast to correct type
|
||||
|
|
|
@ -127,6 +127,12 @@ abstract class Mapper {
|
|||
* @param Entity $entity the entity that should be created
|
||||
*/
|
||||
public function update(Entity $entity){
|
||||
// if entity wasn't changed it makes no sense to run a db query
|
||||
$properties = $entity->getUpdatedFields();
|
||||
if(count($properties) === 0) {
|
||||
return $entity;
|
||||
}
|
||||
|
||||
// entity needs an id
|
||||
$id = $entity->getId();
|
||||
if($id === null){
|
||||
|
@ -136,7 +142,6 @@ abstract class Mapper {
|
|||
|
||||
// get updated fields to save, fields have to be set using a setter to
|
||||
// be saved
|
||||
$properties = $entity->getUpdatedFields();
|
||||
// dont update the id field
|
||||
unset($properties['id']);
|
||||
|
||||
|
|
|
@ -42,8 +42,9 @@ class TestEntity extends Entity {
|
|||
public $testId;
|
||||
public $preName;
|
||||
|
||||
public function __construct(){
|
||||
public function __construct($name=null){
|
||||
$this->addType('testId', 'integer');
|
||||
$this->name = $name;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -211,4 +212,12 @@ class EntityTest extends \PHPUnit_Framework_TestCase {
|
|||
$this->assertEquals('integer', gettype($entity->getId()));
|
||||
}
|
||||
|
||||
|
||||
public function testFieldsNotMarkedUpdatedIfNothingChanges() {
|
||||
$entity = new TestEntity('hey');
|
||||
$entity->setName('hey');
|
||||
$this->assertEquals(0, count($entity->getUpdatedFields()));
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -217,6 +217,20 @@ class MapperTest extends MapperTestUtility {
|
|||
}
|
||||
|
||||
|
||||
public function testUpdateNothingChangedNoQuery(){
|
||||
$params = array('john', 'my@email');
|
||||
$entity = new Example();
|
||||
$entity->setId(3);
|
||||
$entity->setEmail($params[1]);
|
||||
$entity->resetUpdatedFields();
|
||||
|
||||
$this->db->expects($this->never())
|
||||
->method('prepareQuery');
|
||||
|
||||
$this->mapper->update($entity);
|
||||
}
|
||||
|
||||
|
||||
public function testMapRowToEntity(){
|
||||
$entity1 = $this->mapper->mapRow(array('pre_name' => 'test1', 'email' => 'test2'));
|
||||
$entity2 = new Example();
|
||||
|
|
Loading…
Reference in a new issue