public function testJoinLoading() { $a = ['user' => [1 => ['id' => 1, 'name' => 'John', 'contact_id' => 1], 2 => ['id' => 2, 'name' => 'Peter', 'contact_id' => 1], 3 => ['id' => 3, 'name' => 'Joe', 'contact_id' => 2]], 'contact' => [1 => ['id' => 1, 'contact_phone' => '+123'], 2 => ['id' => 2, 'contact_phone' => '+321']]]; $this->setDB($a); $db = new Persistence_SQL($this->db->connection); $m_u = new Model($db, 'user'); $m_u->addField('name'); $j = $m_u->join('contact'); $j->addField('contact_phone'); $m_u->load(1); $this->assertEquals(['name' => 'John', 'contact_id' => 1, 'contact_phone' => '+123', 'id' => 1], $m_u->get()); $m_u->load(3); $this->assertEquals(['name' => 'Joe', 'contact_id' => 2, 'contact_phone' => '+321', 'id' => 3], $m_u->get()); $m_u->tryLoad(4); $this->assertEquals(['name' => null, 'contact_id' => null, 'contact_phone' => null, 'id' => null], $m_u->get()); }
public function testDirty() { $m = new Model(); $m->addField('name'); $m->data = ['name' => 5]; $m['name'] = 5; $this->assertEquals([], $m->dirty); $m['name'] = 10; $this->assertEquals(['name' => 5], $m->dirty); $m['name'] = 15; $this->assertEquals(['name' => 5], $m->dirty); $m['name'] = 5; $this->assertEquals([], $m->dirty); $m['name'] = '5'; $this->assertSame(5, $m->dirty['name']); $m['name'] = '6'; $this->assertSame(5, $m->dirty['name']); $m['name'] = '5'; $this->assertSame(5, $m->dirty['name']); $m['name'] = '5.0'; $this->assertSame(5, $m->dirty['name']); $m->dirty = []; $m->data = ['name' => '']; $m['name'] = ''; $this->assertEquals([], $m->dirty); $m->data = ['name' => '5']; $m['name'] = 5; $this->assertSame('5', $m->dirty['name']); $m['name'] = 6; $this->assertSame('5', $m->dirty['name']); $m['name'] = 5; $this->assertSame('5', $m->dirty['name']); $m['name'] = '5'; $this->assertEquals([], $m->dirty); $m->data = ['name' => 4.28]; $m['name'] = '4.28'; $this->assertSame(4.28, $m->dirty['name']); $m['name'] = '5.28'; $this->assertSame(4.28, $m->dirty['name']); $m['name'] = 4.28; $this->assertEquals([], $m->dirty); // now with defaults $m = new Model(); $f = $m->addField('name', ['default' => 'John']); $this->assertEquals('John', $f->default); $this->assertEquals('John', $m->get('name')); $m['name'] = null; $this->assertEquals(['name' => 'John'], $m->dirty); $this->assertEquals(['name' => null], $m->data); $this->assertEquals(null, $m['name']); unset($m['name']); $this->assertEquals('John', $m->get('name')); }