2017-02-23 52 views
0

如何在cakephp中使用兩個數據庫編寫連接查詢。這是我的代碼,我想連接兩個數據庫連接,但我有一個單一的Db連接。如何在cakephp中使用「兩個數據庫」編寫連接查詢

<?php 
    namespace App\Controller; 
    use App\Controller\AppController; 
    use Cake\Datasource\ConnectionManager; 
    use src\Model\Table\classScheduleDbConnTable; 

    class TimeTableController extends AppController { 
     public function index() { 
      $jpDB = ConnectionManager::get('default'); 
      $ClsDB = ConnectionManager::get('test'); 
      $result = $ClsDB->execute('SELECT * FROM t_class_schedule')->fetchAll('assoc'); 
      $data=array(); 
      foreach ($result as $key => $value) { 
       $data[$key]['id'] = $value['id']; 
       $dates = date("Y-m-d", strtotime($value['classDate'])); 
       $data[$key]['fromTime'] = $value['fromTime']; 
       $data[$key]['toTime'] = $value['toTime']; 
       $data[$key]['keyWord'] = $value['keyWord']; 
       $data[$key]['classDate'] = $dates; 
      } 
      $this->set('datas',$data); 
     } 
    } 
+0

你甚至不使用CakePHP的查詢生成器,因此,這似乎更像是有關任何DBMS問題你正在使用,即一個普通的SQL問題? ** HTTP://stackoverflow.com/questions/32033558/how-to-use-different-datasources-in-a-query-using-cakephp3** – ndm

回答

0

我不相信你可以用這種方式「連接」兩個ConnectionManagers。

你可能有兩種選擇:

選項A - 指定數據庫名稱靜態爲this post每個例子中的表初始化的一部分:

public function initialize(array $config) 
{ 
    $this->table('databaseName.tableName'); 
    // ... 
} 

選項B - 指定替代連接&延遲加載

您可以指定alternative connection names在表級別的特定型號:

class ClassSchedule extends Table 
{ 
    public static function defaultConnectionName() { 
     return 'test'; 
    } 
} 

注意,這不能被用在連接上使用default連接其他表。您將不得不手動「延遲加載」關聯的數據。作爲一個普通的例子(我不知道是什麼的相關項目,只是隨便舉個例子):

$student->class_schedules = TableRegistry::get('ClassSchedules')->find() 
    ->where(['student_id'=>$student-id]) 
    ->toArray(); 
相關問題