tutorial - cakephp hello world
¿Cómo usar diferentes fuentes de datos en una consulta usando cakephp3? (1)
Por ahora, CakePHP no tiene en cuenta las configuraciones de origen de datos al crear uniones, y no creo que esto se agregue en un futuro próximo, sobre todo porque las uniones de bases de datos cruzadas no son compatibles "de fábrica" (como en, solo anteponga el nombre de la base de datos y estará listo) en Postgres y SQLite .
Suponiendo que está utilizando un DBMS que admite uniones cruzadas de DB, lo que podría hacer es cambiar el nombre de la tabla utilizada para incluir también el nombre de la base de datos, es decir,
databaseName.tableName
lugar de solo
tableName
public function initialize(array $config)
{
$this->table(''databaseName.tableName'');
// ...
}
o dinámicamente
$this->table($this->connection()->config()[''database''] . ''.tableName'');
SQLite
Para SQLite, puede hacer que esto funcione con bastante facilidad utilizando la
instrucción
ATTACH DATABASE
, como se puede ver en la respuesta vinculada anteriormente.
En su aplicación CakePHP, puede emitir esta declaración en su rutina de arranque o donde necesite identificación, algo así como
use Cake/Datasource/ConnectionManager;
// ...
/* @var $connection /Cake/Database/Connection */
$connection = ConnectionManager::get(''default'');
$connection->execute(''ATTACH DATABASE "db2.sqlite3" AS databaseName'');
que adjuntaría la base de datos
db2.sqlite3
con un nombre de esquema de
databaseName
.
A partir de ahí, la solución de nombre de tabla mencionada anteriormente debería funcionar bien, al menos la no dinámica, ya que la dinámica usaría algo como
db2.sqlite3
como el nombre del esquema, que no funcionaría.
Postgres
No estoy acostumbrado a Postgres, por lo que en este momento no puedo darle un ejemplo, pero probablemente debería funcionar de manera similar usando envoltorios de datos extranjeros , es decir, emita las declaraciones adecuadas inicialmente y luego simplemente consulte el nombre del esquema especificado.
Estoy trabajando en un proyecto cakePHP3 que tiene 3 fuentes de datos diferentes.
Tengo un modelo principal, llamado aplicación, que debería tener dos asociaciones
hasOne()
a dos modelos con una fuente de datos diferente como Aplicación de modelo.
Creé los dos modelos y apunté las dos Tablas de modelos a sus fuentes de datos con
defaultConnectionName()
.
Ahora agregué dos relaciones
hasOne()
a mi objeto ApplicationsTable y recibí un error sql, al intentar
Applications->get()
.
Esto está claro, ya que en la instrucción SQL no se indica ninguna fuente de datos en la parte FROM y JOIN, como
SELECT * FROM datasource1.myTable
Eché un vistazo a la clase ORM / Query de framework cakephp y el objeto Query solo parece tener una conexión de fuente de datos como un atributo de clase.
¿Hay alguna manera de usar diferentes fuentes de datos en la recuperación de datos usando cake ORM o debería usar una consulta personalizada aquí?
¡Gracias por adelantado!