It can be hard to detect if a quality exists or not already without some extra work.
I would try to check against lowercase and uppercase strings (personally I would use strtolower() and ucwords()) - then you need to check against things like plural or non-plural etc. I agree with euromarks suggestion, but I would put some work into identifying duplicates with slight differences - it may not be necessary but could help. On 16 February 2011 18:01, euromark <[email protected]> wrote: > i can see that you are new to cake :) > > a few hints for the beginning > dont use find(all) for those things - find(first) will do the trick if > you look for a (unique) record (by name in this case) > > you also start to use $data without initializing it > this can cause warnings > > init: > $data = array(); > before using > $data['Quality']['name'] = $name; > > you could also move the code to the model (leaving only the setFlash > stuff to the controller) > this way you can then create an own function for handling the "if > exists ok else create new record" stuff > > pretty soon your code is beautiful again > > > On 15 Feb., 20:24, Dwayne Hanekamp <[email protected]> wrote: > > Allright, so i'm starting to get around with Cakephp, and i'm > > currently working at a schoolproject in which you need to be able to > > add qualities to your profile. They need to be able to add lots of > > qualities (so Users <> Qualities is a HaBtM relation). The problem i'm > > walking allong is that i want my app to only create a new quality if > > its not existing yet. Else my app needs to pick up the quality_id of > > the existing quality and create a new relation with that id. Also > > people may not have the same relation twice (same quality twice). I > > currently do this via the controller but i believe there is a much > > more effective way of dealing with this. Could anyone help me with it? > > > > My current code: > > > > function addqualities() { > > $this->loadModel('UsersQuality'); > > if(!empty($this->data)){ > > foreach($this->data['Quality']['name'] as $name){ > > $name = trim($name); > > $name = strtolower($name); > > $name = ucwords($name); > > > > $result = $this->Quality->find('all', array('conditions' > => > > array('Quality.name' => $name))); > > if(empty($result)){ > > $data['Quality']['name'] = $name; > > $this->Quality->create(); > > if($this->Quality->save($data)){ > > $result = $this->Quality->find('all', array('conditions' > => > > array('Quality.name' => $name))); > > $data['UsersQuality']['quality_id'] = > $result[0]['Quality']['id']; > > $data['UsersQuality']['user_id'] = > $this->Auth->user('id'); > > $data['UsersQuality']['skill'] = 1; > > $this->UsersQuality->create(); > > if($this->UsersQuality->save($data)){ > > $this->Session->setFlash('Quality added.'); > > } > > } > > } > > else{ > > $data['UsersQuality']['quality_id'] = > $result[0]['Quality']['id']; > > $data['UsersQuality']['user_id'] = > $this->Auth->user('id'); > > $data['UsersQuality']['skill'] = 1; > > $result = $this->UsersQuality->find('all', > array('conditions' => > > array('AND' => array('UsersQuality.user_id' => $data['UsersQuality'] > > ['user_id'], 'UsersQuality.quality_id' => $data['UsersQuality'] > > ['quality_id'])))); > > if(empty($result)){ > > $this->UsersQuality->create(); > > if($this->UsersQuality->save($data)){ > > $this->Session->setFlash('Quality added.'); > > } > > else{ > > $this->Session->setFlash('You already have this > quality.'); > > } > > } > > } > > } > > } > > } > > -- > Our newest site for the community: CakePHP Video Tutorials > http://tv.cakephp.org > Check out the new CakePHP Questions site http://ask.cakephp.org and help > others with their CakePHP related questions. > > > To unsubscribe from this group, send email to > [email protected] For more options, visit this group > at http://groups.google.com/group/cake-php > -- Kind Regards Stephen @ NinjaCoderMonkey www.ninjacodermonkey.co.uk -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cake-php
