world tutorial hello example español ejemplos cakephp3 cake cakephp orm associations cakephp-3.0 cross-database

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!