사용자가 이미지를 표시하도록 설정하려면 다른 모든 이미지를 featured
이 아닌 것으로 재설정해야합니다. 나는 다음과 같은 raw SQL
쿼리를 사용하여이 작업을 수행했습니다.원시 SQL 쿼리 대신 ORM을 사용하여 값을 업데이트하는 방법은 무엇입니까?
ORM
을 사용하여이 작업을 수행하는 더 깨끗한 방법이 있습니까? 아니면이 유형의 경우에는 그대로 유지하는 것이 더 깔끔합니까? 이 같은
<?php
class Banner extends DataObject {
private static $db = array(
'FeaturedImage' => 'Boolean'
);
private static $has_one = array(
'Image' => 'Image'
);
private static $summary_fields = array(
'Image.CMSThumbnail' => 'Image',
'FeaturedImage.Nice' => 'Featured?'
);
public function onBeforeWrite()
{
parent::onBeforeWrite();
// When user sets an image to be featured, reset all other images not to be featured
if ($this->FeaturedImage) {
$query = 'UPDATE Banner SET FeaturedImage = 0 WHERE Banner.ID !=' . $this->ID;
DB::query($query);
}
}
}
greg이 onAfterWrite에서 최고라고 말하지만, 다시 한번 CMSAction의 일종을 만들고 이것을 "해킹"하지 말아야합니다. – Barry
@ifusion cleaner, well ... 그러나 하나의 옵션은 배너 객체를 드롭 다운 또는 listboxfiled 당 하나의 bannerobjects에 보유하는 동일한 객체의 has_one 옵션입니다. – munomono