Im trying to import online registrations into my cakephp application.
The registration data is stored in a db table. Currently my
application queries the pending registration data and loops through
the result set. Splits the data into relevant pieces that are inserted
into cakephp db tables via model.

Models:
Person
CourseRegistration

AdminController with import_registrations() action

I would like to create a "person" record for each registration the
first time the import is run. Thereafter I check the people table if a
record for this name exists. If the person is already in the db I want
to skip the record creation and only retrieve the id for this
person...

The find query does not seem to find any results the first time.
Although when I look at the database table multiple records with the
same firstname lastname combination are created. When I run the action
once again the find operation is successfull and no additional records
are inserted.

Could it be that there is a query caching mechanism involved that
prevents the query operation from reloading the table data? Has anyone
had this problem with batch importing/inserting records before?

Here is some of the relevant code. Any help would be great! Thanks.

--------
#########################

in the AdminController function import_registrations() I get the
registration data from db with and call the parseRegistrationData()
function for each row...

function import_registrations()
{
uses('model' . DS . 'connection_manager');
$this->db = ConnectionManager::getInstance();
$this->connected = $this->db->getDataSource('default');

$sql = "SELECT uid, submittedfields, date FROM ".$importtable." WHERE
downloaded ='n'  AND date > '".$date."' ORDER BY date ASC LIMIT 150";
$result = $this->connected->query($sql);
$total = count($result);

for($i=0; $i < $total; $i++) {

    $this->currentRecordId = $result[$i][$importtable]['uid'];
    $output .= $this->parseRegistrationData($result[$i][$importtable]
['submittedfields']);
    $this->recordCount++;
}

...

}

and then I pass each result row to the parseRegistration function...


/**************
 * parseRegistrationData
 * split row and create Person and Registration records
 * @param array row with registration data
 **************/
function parseRegistrationData($row)
{

check data etc..
...

// prepare course data
$courses = split(",", $courses);

if(count($courses > 0)) {

        $name = ucwords(trim($regData[0])) ."
".ucwords(trim($regData[1]));

        // check result of this array with db result!
        if(!array_key_exists($name,$this->names)) {
            $this->names[$name] = "uid :".$this->currentRecordId;
        }

        $criteria = "name ='".$name."'";
        $sql = "SELECT id FROM people WHERE ".$criteria;
        $result = $this->connected->query($sql);

        if(count($result)) {
            // person already exists in db!
            $person1_id = $result[0]['people']['id'];


        } else {
            // create person1 from form data
            $data['Person']['id'] = '';
            $data['Person']['firstname'] = ucwords(trim($regData[0]));
            $data['Person']['lastname'] = ucwords(trim($regData[1]));
            $data['Person']['name'] = $name;
            $data['Person']['birthdate'] = null;
            $data['Person']['sex'] = $regData[2];
            $data['Person']['street'] = trim($regData[3]);
            $data['Person']['zip'] = $regData[4];
            $data['Person']['city'] = $regData[5];
            $data['Person']['telephone1'] = $regData[6];
            $data['Person']['telephone2'] = '';
            $data['Person']['cell'] = $regData[7];
            $data['Person']['email'] = $regData[8];
            $data['Person']['membership_type'] = $regData[9] ?
$regData[9] : 'KM'; // tarif1
            $data['Person']['referal'] = $regData[11];
            $data['Person']['note'] = '';
            $data['Person']['newsletter'] = 1;
            $data['Person']['assistent'] = 0;
            $data['Person']['membership_start'] = null;
            $data['Person']['membership_end'] = null;
            $data['Person']['credit'] = 0;
            $data['Person']['checked'] = 0;
            $data['Person']['created'] = date("Y-m-d H:i:s", time());
            $data['Person']['modified'] = $data['Person']
['created'];

            if($data['Person']['sex'] == 'männlich') {
                $data['Person']['prefix'] = 'Herr';
            } else {
                $data['Person']['prefix'] = 'Frau';
            }

            $this->Person->save($data);
            $person1_id = $this->Person->getID($list = 0);
        }

}


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to