User Tools

Site Tools


documents:cakephp_best_practice

This is an old revision of the document!


CakePHP best practice

1. Save large record set

If we have to insert large data, existed method saveAll() will be slow rather than core query.

public function submitData($data = array()) {
 
    if (!empty($data)) {
        $queryString = '';
        $queryData = array();
        $i = 0;
 
        foreach ($data as $item) {
	    if (empty($queryString)) {
	        $queryString = "INSERT INTO `tablename` (";
	        $columns = array();
	        $values = array();
	        foreach($item as $key=>$value) {
		    $columns[] = "`$key`";
		    $values[] = !is_numeric($value) ? "'" . Utils::mres($value) . "'" : $value;
	        }
 
	        $queryString .= implode(',', $columns) . ') VALUES ';
	        $queryData[] = '(' . implode(',', $values) . ')';
	    } else {
	        $values = array();
	        foreach($item as $key=>$value) {
		    $values[] = !is_numeric($value) ? "'" . $value . "'" : $value;
	        }
	        $queryData[] = '(' . implode(',', $values) . ')';
	    }
 
	    $i++;
 
	    if ($i == 500) {
	        $queryString .= implode(',', $queryData);
	        $this->query($queryString);
	        $queryString = '';
	        $queryData = array();
	        $i = 0;
	    }
        }
 
        $queryString .= implode(',', $queryData);
        if (!empty($queryString)) {
	    $this->query($queryString);
        }
    }
}
documents/cakephp_best_practice.1429971268.txt.gz · Last modified: 2015/04/25 14:14 by admin