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
|
@ -92,6 +92,9 @@ abstract class Entity {
|
||||||
protected function setter($name, $args) {
|
protected function setter($name, $args) {
|
||||||
// setters should only work for existing attributes
|
// setters should only work for existing attributes
|
||||||
if(property_exists($this, $name)){
|
if(property_exists($this, $name)){
|
||||||
|
if($this->$name === $args[0]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
$this->markFieldUpdated($name);
|
$this->markFieldUpdated($name);
|
||||||
|
|
||||||
// if type definition exists, cast to correct type
|
// if type definition exists, cast to correct type
|
||||||
|
|
|
@ -127,6 +127,12 @@ abstract class Mapper {
|
||||||
* @param Entity $entity the entity that should be created
|
* @param Entity $entity the entity that should be created
|
||||||
*/
|
*/
|
||||||
public function update(Entity $entity){
|
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
|
// entity needs an id
|
||||||
$id = $entity->getId();
|
$id = $entity->getId();
|
||||||
if($id === null){
|
if($id === null){
|
||||||
|
@ -136,7 +142,6 @@ abstract class Mapper {
|
||||||
|
|
||||||
// get updated fields to save, fields have to be set using a setter to
|
// get updated fields to save, fields have to be set using a setter to
|
||||||
// be saved
|
// be saved
|
||||||
$properties = $entity->getUpdatedFields();
|
|
||||||
// dont update the id field
|
// dont update the id field
|
||||||
unset($properties['id']);
|
unset($properties['id']);
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,9 @@ class TestEntity extends Entity {
|
||||||
public $testId;
|
public $testId;
|
||||||
public $preName;
|
public $preName;
|
||||||
|
|
||||||
public function __construct(){
|
public function __construct($name=null){
|
||||||
$this->addType('testId', 'integer');
|
$this->addType('testId', 'integer');
|
||||||
|
$this->name = $name;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -211,4 +212,12 @@ class EntityTest extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals('integer', gettype($entity->getId()));
|
$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(){
|
public function testMapRowToEntity(){
|
||||||
$entity1 = $this->mapper->mapRow(array('pre_name' => 'test1', 'email' => 'test2'));
|
$entity1 = $this->mapper->mapRow(array('pre_name' => 'test1', 'email' => 'test2'));
|
||||||
$entity2 = new Example();
|
$entity2 = new Example();
|
||||||
|
|
Loading…
Reference in New Issue