Skip to content
Snippets Groups Projects
Commit 5199e450 authored by Bernhard Posselt's avatar Bernhard Posselt
Browse files

dont update entity and dont run an update query if an entity wasnt changed at all

parent 309aa3bc
Branches
No related tags found
No related merge requests found
......@@ -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()));
}
}
\ No newline at end of file
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment