Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORM i zapisywanie danych do bazy
Forum PHP.pl > Forum > PHP > Object-oriented programming
Apo
Witam
Zacząłem ostatnio pisać ORM i natrafiłem na problem przy zapisywaniu danych. Narazie rozwiązałem to tak:

  1. <?php
  2. class ORM {
  3.  
  4. public function Save(OrmDataRecord $obj)
  5. {
  6. $keys = '';
  7. $data = '';
  8. if(!array_key_exists($this->unique_field, $obj->fields))
  9. {
  10. foreach($obj->fields as $key => $value)
  11. {
  12. $keys .= !empty($keys) ? ', ' : null;
  13. $keys .= '`'.$key.'`';
  14. $data .= !empty($data) ? ', ' : null;
  15. $data .= '`'.$key.'` = "'.$value.'"';
  16. }
  17. return db::query('INSERT INTO '.$this->table.'('.$keys.') VALUES('.$data.')');
  18. }
  19.  // tu bedzie UPDATE
  20. }
  21. }
  22. ?>

$this->unique_field - to string który przechowuje nazwe pola głównego (czyli głównie id)
$obj->fields - to tablica asocjacyjna gdzie klicze są nazwami kolumn a wartość, wartościami tych kluczy które zostana zapisane do bazy.
$obj - to obiekt innej klasy (DataObject).

Wydaje mi sie że trochę --[zmoderowane]-- sprawe z tymi przecinkami, ale chodzi mi głównie na wydajności. No i mam pytanie co by było lepsze czy zrobienie tak jak to zrobiłem w pętli foreach z tymi instrukcjami warunkowymi czy bawienie się tablicami (impode itd) aby prowidłowo wstwić przecinki.

Pozdrawiam

---
Zagwiazdkowane wulgaryzmy to nadal wulgaryzmy. Jak sie wysłowić bez tego nie potrafisz to nie wypowiadaj się publicznie.
Jeszcze raz i bedzie ostrzeżenie.
~mike_mech
bigZbig
Ja tam uzywam implode. Tak naprawde implode to tez pentla tyle ze wyspecjalizowana i napisana w C a wiec wydajniejsza. Foreach jest bardziej elastyczne i uniwersalne, ale jesli mozna zastosowac bezposrednio gotowa funkcje php to moim zdaniem nalezy to zrobic.

  1. <?php
  2. //...
  3. public static function getQueryInsert($aFieldsAndValues, $sTable){
  4. $aFields = array_keys($aFieldsAndValues);
  5. $aValues = self::_addQuotationMarks($aFieldsAndValues);
  6. $sQuery = 'INSERT INTO '.$sTable.' ('.implode(",", $aFields).')';
  7. $sQuery .= ' VALUES ('.implode(",", $aValues).')';
  8. return $sQuery;
  9. }
  10. //...
  11. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.