From e080873ec3faa59bab77588fd011b3eb49704462 Mon Sep 17 00:00:00 2001 From: objecttothis Date: Mon, 28 Jan 2019 18:16:17 +0400 Subject: [PATCH] Check to see if attribute_value already exists --- application/models/Attribute.php | 45 +++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/application/models/Attribute.php b/application/models/Attribute.php index 9dd597b76..f03e5b632 100644 --- a/application/models/Attribute.php +++ b/application/models/Attribute.php @@ -56,6 +56,17 @@ class Attribute extends CI_Model return ($this->db->get()->num_rows() > 0); } + /* + Determines if a given attribute_value exists in the attribute_values table + */ + public function value_exists($attribute_value) + { + $this->db->from('attribute_values'); + $this->db->where('attribute_value', $attribute_value); + + return ($this->db->get()->num_rows() > 0); + } + /* Gets information about a particular attribute definition */ @@ -111,6 +122,18 @@ class Attribute extends CI_Model return $this->db->get(); } + /* + Given the attribute_value returns the associated attribute_id + */ + private function get_id_by_value($attribute_value) + { + $this->db->distinct('attribute_id'); + $this->db->from('attribute_values'); + $this->db->where('attribute_value',$attribute_value); + + return $this->db->get()->row()->attribute_id; + } + public function get_attributes_by_item($item_id) { $this->db->from('attribute_definitions'); @@ -394,19 +417,27 @@ class Attribute extends CI_Model public function save_value($attribute_value, $definition_id, $item_id = FALSE, $attribute_id = FALSE, $definition_type = DROPDOWN) { $this->db->trans_start(); - + if(empty($attribute_id) || empty($item_id)) { if($definition_type != DATETIME) { - $this->db->insert('attribute_values', array('attribute_value' => $attribute_value)); + if($this->value_exists($attribute_value)) + { + $attribute_id = $this->get_id_by_value($attribute_value); + } + else + { + $this->db->insert('attribute_values', array('attribute_value' => $attribute_value)); + $attribute_id = $this->db->insert_id(); + } } else { $this->db->insert('attribute_values', array('attribute_datetime' => date('Y-m-d H:i:s', strtotime($attribute_value)))); + $attribute_id = $this->db->insert_id(); } - $attribute_id = $this->db->insert_id(); - + $this->db->insert('attribute_links', array( 'attribute_id' => empty($attribute_id) ? NULL : $attribute_id, 'item_id' => empty($item_id) ? NULL : $item_id, @@ -417,12 +448,12 @@ class Attribute extends CI_Model $this->db->where('attribute_id', $attribute_id); $this->db->update('attribute_values', array('attribute_value' => $attribute_value)); } - + $this->db->trans_complete(); - + return $attribute_id; } - + public function delete_value($attribute_value, $definition_id) { return $this->db->query("DELETE atrv, atrl FROM " . $this->db->dbprefix('attribute_values') . " atrv, " . $this->db->dbprefix('attribute_links') . " atrl " .