[英]Cakephp - How to get data from other model using associated model?
[英]Retrieve associated model from different database using cakephp 3
我正在開發一個將使用兩個數據庫的應用程序:一個用於存儲應用程序數據的主數據庫,另一個用於檢查用戶名和其他只讀內容的數據庫。 所以我在我的app.php中設置了兩個不同的連接:
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '192.168.2.31',
'username' => 'srddev',
'password' => 'srddev',
'database' => 'srddev',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
],
'spd' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '192.168.2.31',
'username' => 'spddev',
'password' => 'spddev',
'database' => 'spddev',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
],
之后,我在Model/Table/UsersTable.php中添加了一個方法,這樣蛋糕就會知道該表使用了不同的數據庫:
public static function defaultConnectionName() {
return 'spd';
}
我正在使用此表對用戶進行身份驗證,它工作正常。 但現在我想將這個 model 與我的主數據庫中的“pedidos”(訂單)model 相關聯,但它無法正常工作。 我正在我的PedidosController.php中嘗試這個:
public function index()
{
$this->paginate = [
'contain' => ['Users']
];
$this->set('pedidos', $this->paginate($this->Pedidos));
$this->set('_serialize', ['pedidos']);
}
但它不起作用。 我收到以下錯誤:錯誤:SQLSTATE[42S02]:未找到基表或視圖:1146 表“srddev.users”不存在
嗯,我不應該在srddev數據庫中尋找這個表,它屬於spddev ,正如我在我的 UsersTable.php 中發出的信號。 我如何告訴 cakephp 應該在不同的連接中查詢此表?
Ps.:這兩個“數據庫”其實都是同一個mysql服務器中的schemmas。 我嘗試使用默認連接和配置$this->table('spddev.users');連接到 spddev.users 表 , 但沒有成功。
您可以嘗試在關聯中設置strategy
以select
。 這可能會有所幫助。 尚無對跨架構關聯的全面支持。 我已經做了一些工作,但並不能解決所有情況。
我不確定它是在哪個CakePHP 3版本中合並的,但是我建議您保持最新的發行周期。
它在我的項目中有效
class {YourTableNameInCamelCase}Table extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('{YourDBName}.{YourTableName}');
並且不需要將策略設置為'select',因為它可能會導致查詢限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.