所以我有一個模型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