Skip to content

Commit 69fd320

Browse files
committed
Fixed setMeta() wouldn't remove meta from database when setting a default value defined in defaultMetaValues property
1 parent fa8eb8b commit 69fd320

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/Kodeine/Metable/Metable.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@ public function setMeta($key, $value = null) {
4545

4646
protected function setMetaString($key, $value) {
4747
$key = strtolower( $key );
48+
49+
// If there is a default value, remove the meta row instead - future returns of
50+
// this value will be handled via the default logic in the accessor
51+
if (
52+
property_exists( $this, 'defaultMetaValues' ) &&
53+
array_key_exists( $key, $this->defaultMetaValues ) &&
54+
$this->defaultMetaValues[$key] == $value
55+
) {
56+
$this->unsetMeta( $key );
57+
58+
return $this;
59+
}
60+
4861
if ( $this->getMetaData()->has( $key ) ) {
4962

5063
// Make sure deletion marker is not set

tests/MetableTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,16 @@ public function testDefaultMetaValues() {
176176

177177
$this->assertNull( $metaData->first(), 'Default value should be removed from database.' );
178178

179+
$user->setMeta( 'default_meta_key', 'foo' );
180+
$user->save();
181+
182+
$this->assertEquals( 'foo', is_null( $meta = $metaData->first() ) ? null : $meta->value, 'Default value should be changed in database.' );
183+
184+
$user->setMeta( 'default_meta_key', 'default_meta_value' );
185+
$user->save();
186+
187+
$this->assertNull( $metaData->first(), 'Default value should be removed from database.' );
188+
179189
$user->delete();
180190
}
181191

0 commit comments

Comments
 (0)