Kohana 3 Orm - كيف تعرف ما إذا كان النموذج الحالي الذي تم حفظه جديدًا؟
-
27-09-2019 - |
سؤال
في طراز ORM الخاص بي ، أود حفظ بعض القيم الافتراضية التي يتم حسابها بناءً على قيم أخرى. أفضل ما يمكن أن أتوصل إليه هو:
function save(){
if( ! $this->loaded()){
// Set values here
}
parent::save();
}
هل يعرف أي شخص ما إذا كانت هناك طريقة أفضل/موصى بها للقيام بذلك ، أو هل ينبغي أن يكون هذا كافيًا لمعظم الحالات؟ شكرًا :)
المحلول
تنفيذك جيد. التحسن الوحيد الذي يمكنك القيام به هو مجرد استبدال حالتك إلى:
if (!$this->_loaded) {
نصائح أخرى
إنه سؤال جيد جدًا.
للأسف طريقك طريقك فقط.
أدناه orm :: create () وظيفة wich تسمى من orm :: save ().
public function create(Validation $validation = NULL)
{
if ($this->_loaded)
throw new Kohana_Exception('Cannot create :model model because it is already loaded.', array(':model' => $this->_object_name));
// Require model validation before saving
if ( ! $this->_valid OR $validation)
{
$this->check($validation);
}
$data = array();
foreach ($this->_changed as $column)
{
// Generate list of column => values
$data[$column] = $this->_object[$column];
}
if (is_array($this->_created_column))
{
// Fill the created column
$column = $this->_created_column['column'];
$format = $this->_created_column['format'];
$data[$column] = $this->_object[$column] = ($format === TRUE) ? time() : date($format);
}
$result = DB::insert($this->_table_name)
->columns(array_keys($data))
->values(array_values($data))
->execute($this->_db);
if ( ! array_key_exists($this->_primary_key, $data))
{
// Load the insert id as the primary key if it was left out
$this->_object[$this->_primary_key] = $this->_primary_key_value = $result[0];
}
else
{
$this->_primary_key_value = $this->_object[$this->_primary_key];
}
// Object is now loaded and saved
$this->_loaded = $this->_saved = TRUE;
// All changes have been saved
$this->_changed = array();
$this->_original_values = $this->_object;
return $this;
}
كما ترون ، لا توجد قيم defaut ...
لا تنتمي إلى StackOverflow