Mam dwie bazy danych, a każda baza danych ma tę samą tabelę z tymi samymi polami, ale jak uzyskać wszystkie rekordy ze wszystkich dwóch baz danych w tym samym czasie w Yii 2.0?Wiele połączeń z bazami danych i Yii 2.0
Odpowiedz
Najpierw trzeba skonfigurować baz danych jak poniżej:
return [
'components' => [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,...
'username' => 'db1username',
'password' => 'db1password',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db2name', // Maybe other DBMS such as psql (PostgreSQL),...
'username' => 'db2username',
'password' => 'db2password',
],
],
];
Następnie można po prostu:
// To get from db1
Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()
// To get from db2
Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()
Jeśli używasz aktywnego modelu rekord w modelu można zdefiniować:
public function getDb() {
return Yii::$app->db1;
}
//Or db2
public function getDb() {
return Yii::$app->db2;
}
Następnie:
Jeśli ustawiono db1
w metodzie getDb()
, wynik zostanie pobrany z db1
i tak dalej.
ModelName::find()->select('*')->all();
Wystarczy dodać: Śledziłem odpowiedź zapewnione, ale wciąż mam błąd: „Nieznany składnik ID: DB”
Po kilku testach, tutaj jest to, co odkryłem: Funkcja getDB jest tylko o nazwie PO nawiązano połączenie z db. Dlatego nie można usunąć ani zmienić nazwy "db" w pliku konfiguracyjnym. Zamiast tego powinieneś pozwolić, aby wywołanie "db" przebiegło normalnie, a potem je przesłonić.
Rozwiązanie (dla mnie) był następujący:
W config/web.php
dodać swoją drugą konfigurację bazy poniżej db
następująco:
'db' => require(__DIR__ . '/db.php'),
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=name',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'on afterOpen' => function ($event) {
$event->sender->createCommand("SET time_zone = '+00:00'")->execute();
},
],
NIE przemianować db
. Nieodnalezienie bazy danych spowoduje błąd. Możesz dowolnie nazywać db2
.
Teraz w modelu, dodaj następujący kod:
class ModelNameHere extends \yii\db\ActiveRecord {
// add the function below:
public static function getDb() {
return Yii::$app->get('db2'); // second database
}
To będzie teraz zastąpić domyślną konfigurację db
.
Mam nadzieję, że pomaga komuś innemu.
Uwaga: konfigurację dla db2
można dołączyć do innego pliku, ale nie można jej dołączyć do pliku db.php
(oczywiście). Zamiast tego, należy utworzyć plik o nazwie db2.php
i nazwać jak ty db
:
'db' => require(__DIR__ . '/db.php'),
'db2' => require(__DIR__ . '/db2.php'),
Dzięki
Zmieniłem nazwę na "db" i zadziałało. Poza tym twoje rozwiązanie działa. – ColinWa
Próbowałem twoje, ale mam 'SQLSTATE [42000]: [Microsoft] [Sterownik ODBC 11 dla SQL Server] [Serwer SQL] Niepoprawna składnia w pobliżu '='. Wykonywany SQL: SET time_zone = '+00: 00'', jakiś pomysł? dzięki – Blackjack
- 1. Yii wiele połączeń z bazami danych
- 2. Optymalizowanie połączeń z bazami danych
- 3. Połączenia z bazami danych i F #
- 4. Wiele zmiennych połączeń z Propelem i Symfony2
- 5. Yii Framework 2.0 GridView i dane z tabeli łączenia
- 6. Singleton z wieloma bazami danych
- 7. Wiele połączeń z gniazdami
- 8. jak wykonać zewnętrzne połączenia z bazami danych?
- 9. Mysql PHP łączy się z bazami danych
- 10. wstawić wiele danych do bazy danych w Yii 2
- 11. wiele połączeń z bazą danych z has_many przez
- 12. Yii 2.0 Weryfikacja CSRF dla żądania AJAX
- 13. Wiele połączeń w Codeigniter
- 14. Wiele połączeń z siecią WWW
- 15. Jak uaktualnić Yii 1.x do Yii 2.0
- 16. Tabela połączeń MS Access z VBA
- 17. zabaw testy z bazy danych: „Zbyt wiele połączeń”
- 18. PHP/MYSQL - Wiele połączeń z tą samą bazą danych?
- 19. Testowanie aplikacji szyny z wieloma bazami danych
- 20. Nieodebrane połączenia z bazami danych CodeIgniter
- 21. Migracje Django z wieloma bazami danych
- 22. Czy CQRS z bazami danych OLTP i OLAP sprawia wrażenie?
- 23. uzyskiwanie Gii do pracy nad Yii 2.0
- 24. Synchronizacja między dwiema bazami danych
- 25. Transakcje aplikacji niebędących bazami danych
- 26. ViewPatterns i wiele połączeń w Haskell
- 27. c3p0 jak zamknąć wszystkie połączenia z bazami danych i ponownie je otworzyć w razie potrzeby?
- 28. ASP.NET MVC. Autofac i wiele ciągów połączeń
- 29. Yii i baza danych wiersz w rozwijanym
- 30. wiele baz danych i wiele modeli w django
Z góry dzięki za Twój wielki answer.It jest naprawdę pomocne. –
@ChhornSoro Witaj drogi –
Wystąpił błąd przy użyciu Twojego kodu. To nie jest całkowicie błędne, ale myślę, że coś przeoczyłeś. Pominąłeś "" class "=> 'yii \ db \ Connection'" po powrocie [ – nodeffect