2015-06-25 75 views
0

我想問,我如何從一個表中獲取數據並在其他查找中使用此數據。Cakephp - 從無關聯的模型中獲取數據庫數據

例如,我有電影表。 我想得到最高評價的3部電影。結果應該返回3個ID。

現在,我想從不關聯的表中創建其他查詢,並將這3個ID作爲「條件」來查找其他表中的數據。

我不想使用關聯,因爲數據存儲在很多數據庫中,這是有問題的。

謝謝。

+0

您正在使用哪個版本? –

+0

@ b0s3 Cakephp3 – user2610146

+0

使用命名空間... –

回答

2

一旦你得到了你的電影ID,您就可以使用in從您的其他Model篩選結果: -

$filmIds = ['32','55','75']; 

$query = TableRegistry::get('Model')->find() 
    ->where(function ($exp, $q) use ($filmIds) { 
     return $exp->in('film_id', $filmIds); 
    }); 
// WHERE film_id IN ('32','55','75') 

檢查出advanced conditions的文檔部分。

如果你需要得到你的電影的ID爲正確的格式(,在示例代碼所示),可以使用對結果Hash::extract()從以前的查詢。

+0

聽起來不錯,但是$ filmIds根據cakephp不確定。 – user2610146

+0

@ user2610146對不起,忘了將'$ filmIds'傳遞給關閉。我已經更新了答案。 – drmonkeyninja

+0

不要說對不起:)每一個幫助是有益的,謝謝。 你給了我一個提示,我做了這樣的: - > where(['id IN'=> $ filmIds]) 此致敬意。 – user2610146

1

如果你的CakePHP 3.x版本,你可以很直觀的方式

$films = TableRegistry::get('Films')->find('highestRated') 
->select(['id']) 
->limlt(3); 

$query = $related->find() 
->where(['id' => $films]); 

子查詢被接受的任何地方可以使用查詢表達式中使用子查詢。例如,在select()和join()方法中。 http://book.cakephp.org/3.0/en/orm/query-builder.html#subqueries

相關問題