İşte Kohana 3 benim güncelleme yöntemidir.
public function update($type, $id, $updates) {
$info = $this->getInfo($type);
$dbTable = $info['table'];
$updatesKeysToValues = array();
var_dump($updates);
foreach($updates as $key => $value) {
// if the value is null or the key isnt set for this, don't update!
if ($value === null OR ! isset($info['columnsToUpdateData'][$key])) continue;
$updatesKeyToValues[] = "`$key` = :$key";
}
$updatesKeyToValues = implode(', ', $updatesKeyToValues);
$query = 'UPDATE `' . $dbTable . '` SET ' . $updatesKeyToValues . ' WHERE id = :id LIMIT 1' ;
echo $query;
$dbQuery = DB::query(Database::UPDATE, $query);
foreach($updates as $key => $value) {
echo "$key === $value\n<br>";
$dbQuery->bind(':' . $key, $value);
}
$success = $dbQuery->bind(':id', $id)
->execute();
var_dump($success);
}
Her var_dump()
ve echo
, veri gayet iyi sırasında. Bu neden oluyor önermek için bir şey yok.
Esasen ne yapıyorum, adında params ile bir sorgu dize bina döngü ve adlandırılmış params tanımlayan ve daha sonra yürütme, yapılandırma bu tablo için veri alma olduğunu. Bunun yerine çalışma, ben aynı (son dizi değeri ne olursa olsun gibi görünüyor) tüm alanlar ile sonuna kadar.
Yapabileceğini, onu anlamaya gibi olamaz? Zaman ayırdığınız için çok teşekkürler.
UPDATE
Ben sadece olan bir sorguda param adlarında geçerli altını, bir düşünce vardı?
ANOTHER UPDATE
Burada echo $query
çıkışı olan
UPDATE `personnel` SET `first_name` = :first_name, `last_name` = :last_name, `email` = :email WHERE id = :id LIMIT 1
Ben de çok sorguya birden params bağlama bu yöntemi kadar pişirilir. Ben daha önce bir döngü içinde hiç yapmadım, ama işe kabul. Kohana 2.x, ben her zaman $bindings[] = 'tom@jones.com'
vb kullanılan ediyorum, ama yeni Kohana kadarıyla söyleyebilirim gibi bir dizi kabul etmez.
FINAL UPDATE
Herkese teşekkürler, ben referans olarak geçirilen düşünüyorum. I $updates[$key]
bunu ayarlayarak çevresinde var
Ben de param()
yöntemi yerine bağlama kullanılan Nın olabilir gibi görünüyor. View source