所以我有一个模型site(#id, name, start_date, end_date)
这可能在pause(#id, site_id, start_date, end_date)
,我想跟踪暂停。添加一个计算字段与另一个表的数据
我开始在站点CRUD中添加一个扩展器按钮,以便能够添加/删除暂停。奇迹般有效。
但是现在我想直接在网站列表中了解每个网站的状态。于是我开始通过添加新的表达领域,只是测试,如果该网站是在进行中:
$this->addExpression('state')->set('if(site.end_date IS NULL,"In Progress", if(now() < site.end_date, "In Progress", "Ended"))');
完美的作品!但现在我不能想到的方法来确定该网站是否处于暂停或没有,事实上我不能reproduice以上使用结果addExpression()->set(function($m, $q) {});
编辑:
因此,通过DARKSIDE给出的例子就像一个魅力,还是我现在需要将两个结果组合成一个单场state
:
$this->addExpression('state')->set(function($model, $select)
{
// Is it ended ?
$ended = $select->expr('if(site.date_ended IS NULL,"In Progress", if(now() < site.date_ended, "In Progress", "Ended"))');
// Is it in pause ?
$paused = $model->refSQL('Site_Pause')
->count()
->where('date_started', '<', $select->expr('now()'))
->where('date_ended', '>', $select->expr('now()'));
if ($paused > 0)
return 'paused';
return $ended;
});
至于$模型 - > refSQL()返回一个对象DSQL我不能使用的if
语句。我应该尝试通过从Dsql对象中获取结果来进行一次全部SQL查询或尝试使用if
语句吗?
THX我更好地了解现在使用的$ m和$ Q,看编辑的问题,在最后一步,我想实现 – Sluggogle
我想你应该尝试在一个SQL中完成所有操作,然后将其作为DSQL返回。您可以尝试将另一个DSQL注入另一个DSQL中作为子选择。也许这可以帮助。今晚我有点困了,想成为一个很好的例子:) – DarkSide