public function create(array $fields, $foreign_models = array()) { if (isset($fields['next_to_node'])) { $transaction = true; $fields['left'] = $fields['next_to_node']['right'] + 1; $fields['right'] = $fields['left'] + 1; $this->_transaction_begin(); $this->_query_update()->set('`left` = `left` + 2')->where('`left` >', $fields['next_to_node']['left'])->execute(); $this->_query_update()->set('`right` = `right` + 2')->where('`right` >', $fields['next_to_node']['right'])->execute(); } else { if (isset($fields['inside_node'])) { $transaction = true; $fields['left'] = $fields['inside_node']['left'] + 1; $fields['right'] = $fields['left'] + 1; $this->_transaction_begin(); $this->_query_update()->set('`left` = `left` + 2')->where('`left` >', $fields['inside_node']['left'])->execute(); $this->_query_update()->set('`right` = `right` + 2')->where('`right` >', $fields['inside_node']['left'])->execute(); } else { if (!isset($fields['left'], $fields['right'])) { $transaction = true; $this->_transaction_begin(); $last_right = $this->_query_select('MAX(`right`) AS max_right')->limit(1)->execute(array('single_column' => true)); $fields['left'] = $last_right + 1; $fields['right'] = $last_right + 2; } } } unset($fields['next_to_node'], $fields['inside_node']); parent::create($fields, $foreign_models); if ($transaction) { $this->_transaction_end(); } }
private function _create_one_to_one($fields, self $foreign_model, $foreign) { $foreign_singular = isset($foreign['singular']) ? $foreign['singular'] : $foreign_model->singular(); if (isset($fields[$foreign_singular])) { //throw new \InvalidArgumentException("Missing \"{$foreign_singular}\" data"); $foreign_id = $foreign_model->create($fields[$foreign_singular]); unset($fields[$foreign_singular]); $fields["{$foreign_singular}_id"] = $foreign_id; } return $fields; }