Hi @ all,
I have problems to write the value of a object variable to the database field.
This is the code of the dataobject (I am sorry for the code-comments in german, but I guess you know, what it is about):
class TestCode extends DataObject {
protected $Code;
static $singular_name = 'Code';
static $plural_name = 'Codes';
static $db = array (
'Code' => 'Varchar'
);
static $has_one = array (
);
public function __construct() {
$this->Code = $this->generateUniqueCode();
parent::__construct();
}
protected function generateCode() {
/*
* Anzahl der Zeichen des Codes
* Bedingung: $length <= count($chars)
*/
$length = 12;
//Zeichen die für den Code verwendet werden sollen
$chars = array_merge(
range('1','9'),
range('a','k'),
array('m','n'),
range('p','z'),
range('A','H'),
range('J','N'),
range('P','Z'),
array('!','$','#','%')
);
//Array in das die Zeichen aufgenommen werden sollen
$codeArr = array();
//Zufallszahlengenerator mit seed setzen
mt_srand((double)microtime()*1000000);
/*
* Das Array mit Zahlen füllen:
* Für jeden Schleifendurchlauf der äußeren Schleife
* wird immer ein neuer Buchstabe zufällig aus der inneren Schleife gewählt
*
*/
for($i = 0; $i < count($chars); $i++){
for($j = 1; $j <= (count($chars)*2); $j++){
$swap = mt_rand(0, count($chars)-1);
$tmp = $chars[$swap];
$chars[$swap] = $chars[0];
$chars[0] = $tmp;
}
$codeArr[$i] = $chars[0];
}
//generierter Code
$code = substr(implode('', $codeArr),0,$length);
return $code;
}
protected function questionDbForCode($code) {
$sqlQuery = new SQLQuery();
$sqlQuery->select('Code');
$sqlQuery->from('TestCode');
$sqlQuery->where("Code", $code);
$val = $sqlQuery->execute()->value();
if($val) {
return true;
} else {
return false;
}
}
protected function generateUniqueCode() {
$code = '';
$goOn = false;
do {
$code = TestCode::generateCode();
$goOn = TestCode::questionDbForCode($code);
} while ($goOn);
return $code;
}
function getCode() {
return $this->Code;
}
}
So when a new instance of 'TestCode' is generated, the objectvariable will get a code.
Now in another class I am calling the function 'generateCode()'. This generates a new databaseentry but the value for the column 'Code' is NULL.
Here is the code for the function 'generateCode()'
function generateCode() {
$tcode = new TestCode();
$tcode->write();
}
I guess there is no association between the objectvariable '$Code' and the database field 'Code'.
What am I doing wrong?
Anybody an idea?
Thank's a lot!