Привязать таблицу Laravel к другому соединению с базой данных - PullRequest
0 голосов
/ 29 сентября 2019

Я нахожу некоторые трудности, связанные с привязкой одной таблицы отношений ко второй базе данных.

В "db_main" у меня есть таблицы с основными сведениями о каждом объекте и другими таблицами: "db_site1","db_site2" и т. д., в таблицах которого я сохраняю подробную информацию об одних и тех же объектах.

Все работает с этой схемой, кроме одной ситуации, в которой у меня есть таблица отношений (bookmaker_games), которая должна быть включена только "db_main».В таблице сохраняются отношения между букмекерами и играми.

На моем сайте1 я хочу перечислить игры букмекера со следующими моделями:

class Bookmaker extends Model {

    public function games() {
        // here the database is "db_site1"
        return $this->belongsToMany('App\Models\Game', 'bookmaker_games', 'bookmaker_id', 'game_id');

    }

}

class Game extends Model {

    public function bookmakers() {
        // here the database is "db_site1"
        return $this->belongsToMany('App\Models\Bookmaker', 'bookmaker_games', 'game_id', 'bookmaker_id');

    }
}

class BookmakerGame extends Model {

    protected $connection = 'db_main';

}

Когда я пытаюсь вернуть все игры,он думает, что таблица «bookmaker_games» находится в базе данных «db_site1», что неверно.

Каков наилучший способ определить эти отношения для просмотра правильной базы данных?

1 Ответ

0 голосов
/ 29 сентября 2019

Объявите BookmakerGame как подкласс Illuminate\Database\Eloquent\Relations\Pivot

Затем определите отношения для его использования.

Префикс имени соединения

//...
use Illuminate\Database\Eloquent\Relations\Pivot;

class Bookmaker extends Model {

    public function games() {
        // here the database is "db_site1"
        return $this->belongsToMany(
           'App\Models\Game', 'db_main.bookmaker_games', 'bookmaker_id', 'game_id')
            ->using('App\Models\BookmakerGame');
    }
}

class Game extends Model {

    public function bookmakers() {
        // here the database is "db_site1"
        return $this->belongsToMany(
           'App\Models\Bookmaker', 'db_main.bookmaker_games', 'game_id', 'bookmaker_id')
            ->using('App\Models\BookmakerGame');

    }
}

class BookmakerGame extends Pivot {
    protected $connection = 'db_main';
}

Использование пути к классу к оси


use Illuminate\Database\Eloquent\Relations\Pivot;

class Bookmaker extends Model {

    public function games() {
        // here the database is "db_site1"
        return $this->belongsToMany(
           'App\Models\Game', 'App\Models\BookmakerGame', 'bookmaker_id', 'game_id');
    }
}

class Game extends Model {

    public function bookmakers() {
        // here the database is "db_site1"
        return $this->belongsToMany(
           'App\Models\Bookmaker', 'App\Models\BookmakerGame', 'game_id', 'bookmaker_id');

    }
}

class BookmakerGame extends Pivot {
    protected $connection = 'db_main';
    protected $table = 'bookmaker_games';
}
...