基本上,它是可能的,如果是這樣,你如何在CakePHP 2.0.6中不使用原始查詢()方法的情況下執行以下代碼。我正在使用PostgreSQL(其中generate_series()
是一個函數)。那麼,你如何做這個查詢CakePHP的方式?CakePHP find with LEFT JOIN和generate_series
$sql = "
SELECT new_rank FROM generate_series(1,999) AS new_rank
LEFT JOIN tasks ON tasks.rank = new_rank
WHERE tasks.rank IS NULL LIMIT 1
";
$data = $this->Task->query($sql);
編輯 一位網友說我可以嘗試使用find呼叫任務和右連接到generate_series()。這是我的嘗試。這段代碼會拋出一個錯誤,因爲CakePHP正在爲generate_series的函數參數放置雙引號。我想知道我該怎麼做到這一點?
$data = $this->Task->find('all', array(
'conditions' => array('Task.rank' => null),
'limit' => 1,
'recursive' => -1,
'fields' => 'new_rank',
'joins' => array(
array(
'table'=>'generate_series(1,999)',
'alias'=>'new_rank',
'type'=>'RIGHT',
'conditions' => array(
'tasks.rank'=>'new_rank'
)
)
)
));
該款產品的SQL語句:
SELECT "Task"."new_rank" AS "Task__new_rank"
FROM "tasks" AS "Task"
RIGHT JOIN generate_series("1,999") AS "new_rank" ON ("tasks"."rank" = 'new_rank')
WHERE "Task"."rank" IS NULL LIMIT 1
對不起,我不知道任何CakePHP,但也許你可以從任務和RIGHT JOIN開始到你的'generate_series'。 – 2012-04-03 15:21:52
這是一個好主意,我已經用我的嘗試更新了OP。不幸的是,CakePHP在1999年左右引用了一些引用。 – Pyrite 2012-04-03 15:46:07
嗯,你可以指定'連接'作爲一個原始字符串?我仍然根據與其他ORM的經驗猜測。 – 2012-04-03 15:52:07