Heim >php教程 >php手册 >Eine einfache ORM-Klasse

Eine einfache ORM-Klasse

WBOY
WBOYOriginal
2016-12-01 00:00:211454Durchsuche

Ich habe selbst eine einfache ORM-Klasse geschrieben, um interessierten Freunden einige Ideen zu geben.
Ich habe selbst eine einfache ORM-Klasse geschrieben, um interessierten Freunden einige Ideen zu geben. Ich habe mir ein wenig von TPs Ideen ausgeliehen. <?php<br /> /**<br /> * Autor: NickBai<br /> *createTime: 28.11.2016 0028 16:00 Uhr<br /> ​*/<br /> Klasse MyOrm implementiert ArrayAccess<br /> {<br /> Public $host = '127.0.0.1'; //Datenbankadresse<br /> Public $dbname = 'test'; //Datenbankname<br /> Public $user = 'root'; //Datenbankbenutzername<br /> ​​public $pwd = 'root'; //Datenbankpasswort<br /> Public $port = '3306'; //Datenbankport<br /> ​​public $charset = 'utf8'; //Datenbankkodierung<br />       private $conn = null;      // Datenbank-Link-Ressourcen <br /> Private $alias = []; //Globale Anweisungsparameter aufzeichnen<br />        private $sql;      // Letztes SQL speichern<br /> <br /> Öffentliche Funktion __construct()<br /> {<br /> If( is_null( $this->conn ) ){<br> <br>                 $dsn = "mysql:host=$this->host;dbname=$this->dbname;charset=$this->charset;port=$this->port";<br> $this->conn = neues PDO( $dsn, $this->user, $this->pwd);<br>         }<br> }<br> <br> //Feldanweisung<br> Öffentliches Funktionsfeld ($field)<br> {<br> Wenn(                                                                                                                                                                             THrow new Exception („Die Parameter der Feldanweisung müssen Zeichenfolgen sein“);<br>         }<br> <br>          $this->alias['field'] = $field;<br>          return $this;<br> }<br> <br> //Tabellenanweisung<br> Öffentliche Funktionstabelle ($table)<br> {<br> Wenn(                                                                                                                                                                                                                                        ‐‐‐‐         }<br> <br>           $this->alias['table'] = $table;<br>          return $this;<br> }<br> <br> //where-Anweisung<br> Öffentliche Funktion where( $where )<br> {<br>          $this->alias['where'] = '';<br> Wenn( <br> foreach( $where as $key=>$vo ){<br>                 $this->alias['where'] .= " `$key`" ' und ';<br>             }<br>                $this->alias['where'] = rtrim( $this->alias['where'], 'and ' );<br> <br>         }else if(  is_string(  $where  ) ){<br> <br>                $this->alias['where'] = $where;<br>           }sonst{<br> <br>                                                                                                                                                                                  Throw new Exception("Die Parameter der where-Anweisung müssen Arrays oder Strings sein");<br>         }<br> <br>          return $this;<br> }<br> <br> //Limit-Anweisung<br> Öffentliches Funktionslimit($limit)<br> {<br>          $this->alias['limit'] = '';<br> Wenn(               $this->alias['limit'] = '0,' $limit;<br>         }else if(  is_string(  $limit  ) ){<br>                $this->alias['limit'] = $limit;<br>           }sonst{<br> throw newException("Die Parameter der Limit-Anweisung müssen Zahlen oder Zeichenfolgen sein");<br>         }<br> <br>          return $this;<br> }<br> <br> //Bestellerklärung<br> Öffentliche Funktionsreihenfolge ($order)<br> {<br> If (! Is_string ($ Order)) {<br>                                                                                                                                                                                                                                   }<br> <br>           $this->alias['order'] = $order;<br>          return $this;<br> }<br> <br> //Gruppenanweisung<br> Öffentliche Funktionsgruppe ($group)<br> {<br> If (! Is_string ($ Group)) {<br>                                                                                                                                                                                                                          ‐‐‐         }<br> <br>           $this->alias['group'] = $group;<br>          return $this;<br> }<br> <br> //Abfrage-SQL-Anweisung analysieren<br> Öffentliche Funktion ParseSelectSql()<br> {<br>          $this->sql = 'select *';<br> If( !empty( $this->alias['field'] ) ){<br>                $this->sql = str_replace( '*', $this->alias['field'], $this->sql );<br>         }<br> <br> If (Empty ($ this- & gt; alias ['table'])) {<br> Neue Ausnahme auslegen ("Bitte verwenden Sie die Tischklausel, um die Abfrage Tabelle festzulegen"; <br>           }sonst{<br> <br> $this->sql .= ' from ' . $this->alias['table'];<br>         }<br> <br> If( !empty( $this->alias['where'] ) ){<br> $this->sql .= ' where ' . $this->alias['where'];<br>         }<br> <br> If( !empty( $this->alias['group'] ) ){<br> $this->sql .= ' group by ' . $this->alias['group'];<br>        }<br> <br>         if( !empty( $this->alias['order'] ) ){<br>             $this->sql .= ' sortieren nach ' . $this->alias['order'];<br>         }<br> <br>         if( !empty( $this->alias['limit'] ) ){<br>             $this->sql .= ' limit ' . $this->alias['limit'];<br>         }<br> <br>     }<br> <br>     //解析添加sql语句<br>     öffentliche Funktion ParseAddSql()<br>     {<br>         $this->sql = 'insert into ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new Exception("请用table子句设置添加表");<br>         }else{<br> <br>             $this->sql .= $this->alias['table'] . ' set ';<br>         }<br> <br>         gib $this->sql;<br> zurück     }<br> <br>     //解析更新sql语句<br>     öffentliche Funktion ParseUpdateSql()<br>     {<br>         $this->sql = 'update ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new Exception("请用table子句设置修改表");<br>         }else{<br> <br>             $this->sql .= $this->alias['table'] . ' set ';<br>         }<br> <br>         if( empty( $this->alias['where'] ) ){<br>             throw new Exception("更新语句必须有where子句指定条件");<br>         }<br> <br>         gib $this->sql;<br> zurück     }<br> <br>     //解析删除sql语句<br>     öffentliche Funktion ParseDeleteSql()<br>     {<br>         $this->sql = 'delete from ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new Exception("请用table子句设置删除表");<br>         }else{<br> <br>             $this->sql .= $this->alias['table'];<br>         }<br> <br>         if( empty( $this->alias['where'] ) ){<br>             throw new Exception("删除语句必须有where子句指定条件");<br>         }<br> <br>         $this->sql .= ' where ' . $this->alias['where'];<br> <br>         gib $this->sql;<br> zurück     }<br> <br> <br>     //查询语句<br>     öffentliche Funktion select()<br>     {<br>         $this->ParseSelectSql();<br>$row = $this->conn->query( $this->sql )->fetchAll( PDO::FETCH_ASSOC );<br>          $result = [];<br> <br> foreach( $row as $key=>$vo ){<br> <br>             $arrObj = clone $this; //Das aktuelle Objekt klonen, um eine Kontamination dieses Objekts zu verhindern<br>                $arrObj->data = $vo;<br>               $result[$key] = $arrObj;<br> ​​​​​​unset($arrObj);<br>        }<br> <br>          return $result;<br> }<br> <br> //Einen Artikel abfragen<br> Öffentliche Funktion find()<br> {<br>           $this->ParseSelectSql();<br> $row = $this->conn->query( $this->sql )->fetch( PDO::FETCH_ASSOC );<br> <br>         $arrObj = clone $this; //Das aktuelle Objekt klonen, um eine Kontamination dieses Objekts zu verhindern<br>          $arrObj->data = $row;<br>         $result = $arrObj;<br> ​​​​unset($arrObj);<br> <br>          return $result;<br> }<br> <br> //Daten hinzufügen<br> Öffentliche Funktion add( $data )<br> {<br> Wenn( neue Ausnahme auslösen("Daten hinzufügen, Methodenparameter hinzufügen müssen Arrays sein");<br>        }<br> <br>           $this->ParseAddSql();<br> foreach( $data as $key=>$vo ){<br> $this->sql .= " `{$key}` = '" $vo        }<br> <br>           $this->conn->exec( rtrim( $this->sql, ',' ));<br>           return $this->conn->lastInsertId();<br> }<br> <br> //Anweisung aktualisieren<br> Öffentliche Funktionsaktualisierung ($data)<br> {<br> Wenn( ​​​​​​wirft eine neue Ausnahme aus („Parameter der Update-Datenaktualisierungsmethode müssen Arrays sein“);<br>        }<br> <br>           $this->ParseUpdateSql();<br> foreach( $data as $key=>$vo ){<br> $this->sql .= " `{$key}` = '" $vo        }<br> <br>           $this->sql = rtrim( $this->sql, ',' ) ' $this->alias['where'];<br>           return $this->conn->exec( $this->sql);<br> <br> }<br> <br> //Anweisung löschen<br> Öffentliche Funktion delete()<br> {<br>           $this->ParseDeleteSql();<br>           return $this->conn->exec( $this->sql);<br>    }<br> <br>     //获取查询数据<br>     öffentliche Funktion getData()<br>     {<br>         gib $this->data;<br> zurück     }<br> <br>     //获取最后一次执行的sql语句<br>     öffentliche Funktion getLastSql()<br>     {<br>         gib $this->sql;<br> zurück     }<br> <br>     öffentliche Funktion __get($name)<br>     {<br>         return $this->getData()[$name];<br>     }<br> <br>     öffentliche Funktion offsetExists($offset)<br>     {<br>         if( !isset( $this->getData()[$offset] ) ){<br>             return NULL;<br>         }<br>     }<br> <br>     öffentliche Funktion offsetGet($offset)<br>     {<br>         return $this->getData()[$offset];<br>     }<br> <br>     öffentliche Funktion offsetSet($offset, $value)<br>     {<br>         return $this->data[$offset] = $value;<br>     }<br> <br>     öffentliche Funktion offsetUnset($offset)<br>     {<br>         unset( $this->data[$offset] );<br>     }<br> }你可以这么用:$orm = new MyOrm();<code class="prettyprint linenums lang-php">$orm = new MyOrm();<br> <br> //查询语句<br> $res = $orm->table('user')->order('id desc')->select();<br> $res = $orm->table('user')->where("name='test'")->order('id desc')->select();<br> $res = $orm->table('user')->where(['id' => 1])->order('id desc')->find();<br> $res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')->limit(2)->select();<br> $res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')->limit('2,2')->select();<br> <br> //你可以这样处理数据<br> foreach( $res as $key=>$vo ){<br>     echo $vo->name . '<br/>';<br> }<br> //也可以这样处理<br> foreach( $res as $key=>$vo ){<br>     echo $vo['name'] . '<br/>';<br> }<br> //还可以这样<br> foreach( $res as $key=>$vo ){<br>     print_r( $vo->getData() ) . '<br/>';<br> }<br> <br> //添加数据<br> $data = [<br>     'name' => 'test1',<br>     'age' => 20,<br>     'password' => '21232f297a57a5a743894a0e4a801fc3',<br>     'salt' => 'domain'<br> ];<br> $res = $orm->table('user')->add( $data );<br> <br> //更新数据<br> $res = $orm->table('user')->where(['id' => 4])->update( ['name' => 'sdfdsfdsd', 'salt' => '111'] );<br> <br> //删除数据<br> $res = $orm->table('user')->where(['id' => 7, 'id' => 6])->delete();<br> <br> //获取执行的sql语句<br> echo $orm->getLastSql();<br> <br> var_dump($res);

//查询语句 $res = $orm->table('user')->where("name='test'")->order('id desc')->select();

$res = $orm->table('user')->where(['id' => 1])->order('id desc')->find();

$res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')-> limit(2)->select(); $res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')-> limit('2,2')->select(); //你可以这样处理数据 foreach( $res as $key=>$vo ){     echo $vo->name . '
'; } //也可以这样处理 foreach( $res as $key=>$vo ){     echo $vo['name'] . '
'; } //还可以这样 foreach( $res as $key=>$vo ){     print_r( $vo->getData() ) . '
'; } //添加数据 $data = [     'name' => 'test1',     'Alter' => 20,     'Passwort' => '21232f297a57a5a743894a0e4a801fc3',     'Salz' => 'Domäne' ]; $res = $orm->table('user')->add( $data ); //更新数据 $res = $orm->table('user')->where(['id' => 4])->update( ['name' => 'sdfdsfdsd', 'salt' => ;  '111'] ); //删除数据 $res = $orm->table('user')->where(['id' => 7, 'id' => 6])->delete(); //获取执行的sql语句 echo $orm->getLastSql(); var_dump($res);
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn