Я видел в нескольких местах, чтобы "держаться подальше" от этого, но, увы, именно так построена моя БД:
class Album extends Eloquent {
// default connection
public function genre() {
return $this->belongsTo('genre');
}
и таблица жанров:
class Genre extends Eloquent {
protected $connection = 'Resources';
}
My 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' => '',
),
и когда я пытаюсь запустить
Album::whereHas('genre', function ($q) {
$q->where('genre', 'German HopScotch');
});
он не выбирается должным образом (не добавляет имя базы данных в таблицу "жанры" ):
Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'my_data.genres' doesn't exist
Важно отметить, что это отлично работает:
Album::first()->genre;
Update
Самое лучшее, что я нашел до сих пор, это использовать метод "from" для создания конкретного соединения. Я обнаружил, что построитель внутри запроса может получить "от"
Album::whereHas('genre', function ($q) {
$q->from('resources.genres')->where('genre', 'German HopScotch');
});
Это достойное решение, но оно требует от меня копать базу данных php и найти хороший способ получить правильную таблицу и имя базы данных из жанра отношения.
Я буду признателен, если кто-то еще сможет использовать это решение и сделать его более общим.