goma smile Posted August 13, 2013 Report Share Posted August 13, 2013 Labdien kas šeit ir nepareizi.... $this->db->select(' round(`count` / `minimum`) AS `ratio` '); $this-db->from('TABLE'); $this->db->where('`ratio` >', 0); Errors šāds Unknown column 'ratio' in 'where clause' Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 13, 2013 Report Share Posted August 13, 2013 dafuq? Kas tas par dīvainu query building interfeisu? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 13, 2013 Report Share Posted August 13, 2013 CI, ja neredzi. //win Quote Link to comment Share on other sites More sharing options...
rpr Posted August 13, 2013 Report Share Posted August 13, 2013 manuprāt šajā gadījumā jāizmanto having, nevis where. p.s. Juri, tu daudz ne pa tēmu raksti un darbā arī tu lamājies vai tikai savu žulti internetā izgāz? Quote Link to comment Share on other sites More sharing options...
Леший Posted August 13, 2013 Report Share Posted August 13, 2013 Parasts CRUD, nav nekā divaina. prp ++ par having. Quote Link to comment Share on other sites More sharing options...
codez Posted August 13, 2013 Report Share Posted August 13, 2013 Tas nav CRUD, tā ir kaut kāda huiņa. Kā var izdomāt vispār kaut ko tik briesmīgu? Quote Link to comment Share on other sites More sharing options...
goma smile Posted August 13, 2013 Author Report Share Posted August 13, 2013 http://ellislab.com/codeigniter/user-guide/database/active_record.html Tas nav CRUD, tā ir kaut kāda huiņa. Kā var izdomāt vispār kaut ko tik briesmīgu? Quote Link to comment Share on other sites More sharing options...
goma smile Posted August 13, 2013 Author Report Share Posted August 13, 2013 http://ellislab.com/codeigniter/user-guide/database/active_record.html Pievērsos mazliet problēmai dziļāk un viņš neatgriež (0) bet vienkārši tukšu vietu... Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 13, 2013 Report Share Posted August 13, 2013 (edited) That's still awful. Kāpēc gan nechainot callus un vispār kāpēc neveidot kaut kādu query objektu, kurš jau satur konkrētas where/having/group/limit/join etc. metodes tā vietā, lai taisītu šos callus uz pamata db objektu? Tā ir God klase, not good IMHO. Man, piemēram, ir uztaisīts sekojoši: DbHandler klase satur metodes "select()", "insert()", "update()", "deleteFrom()", kuras, attiecīgi, padod "DbSelect", "DbInsert", "DbUpdate" un "DbDelete" objektus, kuri jau tālāk satur konkrēti metodes darbībām, saistītām tieši ar to query tipu, kā arī kapsulē esošo query. Objektu var "echo $obj;" un izdrukās tajā esošo query. DbHandler pats satur tikai pamata connection darbības (connect, startTransaction/commit/rollback/getLastInsertId/quote/execute(plain sql w/ no rset)). Attiecīgi parasts SELECT izskatās šādi: $rset = DbHandler::getInstance() ->select(array('colA', 'colB'), 'table') ->where('colC > ?') ->limit(10) ->fetchAll(array('colCValue')); Nav perfekti, jo ir daudzas lietas, ko šāds piegājiens ierobežo, bet pagaidām vēl nav bijušas būtiskas problēmas, vienmēr varu izsaukt arī konkrētā query objekta getStatement() metodi, kura atgriež PDOStatement, un tālāk jau rakstīt pliku SQL query, bet līdz tikai varbūt 2x ir bijusi nepieciešamība ko tādu darīt. Edit: vispār tajā ellislab lapā ir gandrīz pašā apakšā rakstīts, ka method chaining ir atbalstīts (tikai PHP 5+, bet nedomāju, ka tā būtu kāda problēma). Tipa "$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);" Edited August 13, 2013 by jurchiks Quote Link to comment Share on other sites More sharing options...
daGrevis Posted August 13, 2013 Report Share Posted August 13, 2013 Es arī darītu līdzīgi, jurchik. Tikai es nerakstītu savu. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 13, 2013 Report Share Posted August 13, 2013 Nu, man vienkārši bija slinkums meklēt :) Quote Link to comment Share on other sites More sharing options...
F3llony Posted August 13, 2013 Report Share Posted August 13, 2013 Idiorm & Paris Quote Link to comment Share on other sites More sharing options...
codez Posted August 13, 2013 Report Share Posted August 13, 2013 http://ellislab.com/codeigniter/user-guide/database/active_record.html Tas, ko CI šeit sauc par Active Record, nav Active Record pat ne tuvu. Active Record ir pavisam kaut kas cits: https://en.wikipedia.org/wiki/Active_record_pattern The interface of an object conforming to this pattern would include functions such as Insert, Update, and Delete, plus properties that correspond more or less directly to the columns in the underlying database table. Un izmantošana izskatītos aptuveni šādi: $user=new User(); $user->loadByID(5); $user["name"]="john" $user->update(); Quote Link to comment Share on other sites More sharing options...
jurchiks Posted August 13, 2013 Report Share Posted August 13, 2013 Būtu jau labi, bet ko tad, ja vajag sarakstu ar jūzeru datiem? Pieņemsim, pēdējie 100 reģistrējušies? Visiem objektus taisīt? Quote Link to comment Share on other sites More sharing options...
codez Posted August 13, 2013 Report Share Posted August 13, 2013 (edited) Būtu jau labi, bet ko tad, ja vajag sarakstu ar jūzeru datiem? Pieņemsim, pēdējie 100 reģistrējušies? Visiem objektus taisīt? Nav jau run par to, runa ir par to, ka tas nav Active Record un tā čeinošana ir diezgan tizla - būtībā tā ir vēlviena abstrakcijas slāņa iespraušana pa vidu vietā, kur tā galīgi nedod nekādu labumu. Bet PHP es darīju tā: $users = DB::query("SELECT * FROM users ORDER BY registered DESC LIMIT %s", 100)->rows(); un $users būtu 2D masīvs, kur $users[5]['name'] būtu 6. usera no atlasitajiem vārds. Scalā es daru šadi: SQL("SELECT * FROM users ORDER BY registered DESC LIMIT ?",100).select().as[User] Un šada izteiksme man atgriež List[user] - listu ar User objektiem. Atškībā no PHP, Scalā nav praktiski nekādas performaces trūkumu, izveidot listu no objetkiem, kamēr PHP tas ir nepiedodami lēni. Edited August 13, 2013 by codez Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.