widziałem w kilku miejscach do „Trzymaj się z dala” od tego, ale niestety - to jest jak mój DB jest zbudowany:laravel Należy do relacji z różnych baz danych nie działa
class Album extends Eloquent {
// default connection
public function genre() {
return $this->belongsTo('genre');
}
i tabela Gatunek:
class Genre extends Eloquent {
protected $connection = 'Resources';
}
Moja database.php:
'Resources' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'resources',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'my_data',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
i gdy próbuję uruchomić
Album::whereHas('genre', function ($q) {
$q->where('genre', 'German HopScotch');
});
nie wybrać prawidłowo (nie dodać nazwę bazy danych do tabeli "gatunki"):
Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'my_data.genres' doesn't exist
Ważne, aby pamiętać, że działa to doskonale:
Album::first()->genre;
Aktualizacja
Najlepsze, co do tej pory znalazłem, to użycie metody "od" konstruktora do konkretnej nazwij poprawne połączenie. odkryłem, że budowniczy wewnątrz zapytania można otrzymać „od”
Album::whereHas('genre', function ($q) {
$q->from('resources.genres')->where('genre', 'German HopScotch');
});
To jest przyzwoity rozwiązanie, ale wymaga to mnie kopać w php bazy i znaleźć dobry sposób, aby uzyskać odpowiednią tabelę i bazy danych nazwa z relacji "gatunek".
Będę wdzięczny, jeśli ktoś inny będzie mógł zbudować na tym rozwiązaniu i uczynić go bardziej ogólnym.
Jaka wersja laravel należy rozwiązać tę kwestię? –
Używam laravel 4.2 – NiRR