当用户想要设置要显示的图像时,我们希望将所有其他图像重置为featured
。我使用以下原始SQL
查询工作。
使用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);
}
}
}
答案 0 :(得分:2)
您是否已经尝试过此操作(抱歉,无法将其添加为评论)?
public function onAfterWrite()
{
parent::onAfterWrite();
if ($this->FeaturedImage) {
$banners = Banner::get()->exclude('ID', $this->ID);
foreach($banners as $banner) {
$banner->FeaturedImage = false;
$banner->write();
}
}
}
该条件应该阻止写入的递归调用。
答案 1 :(得分:1)
类似的东西:
$banners = Banner::get()->exclude('ID', $this->ID);
foreach($banners as $banner) {
$banner->FeaturedImage = 0;
$banner->write();
}