Laravel - несколько соединений с базой данных получают в среднем из 3 таблиц - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть 3 базы данных

db_1 (стол для студентов)

id | students
1  | 42

db_2 (стол для студентов)

id | students
1  | 31

db_3 (стол для студентов)

id | students
1  | 22

В моем контроллере, как я могу получить общее среднее значение всех студентов, используя только одну модель (Студент). и просто переопределив соединение с базой данных.

1 Ответ

0 голосов
/ 04 сентября 2018

Самый важный бит - это метод setConnection () , вызываемый в Model перед запросом. Помните, что для его использования вам нужны все соединения, определенные в вашем config / database.php в разделе соединений.

class StudentsController extends Controller {
        const DB_COUNT = 3;
        private $students;
        public function __construct(Students $students) {
            $this->students = $students;
        }

        public function index(Request $request) {
            for ($i=0; $i<self::DB_COUNT; $i++) { //or foreach through config('database.connections', [])
               $this->students->setConnection('db_'.($i+1));
               $students[] = $this->students->find(1)->students;
            }
            //what is "totalAVG" ???
            $totalAvg = array_sum($students) / self::DB_COUNT;
        }
    }

В качестве альтернативы, если мы хотим придерживаться определенных имен соединений:

public function index(Request $request) {
                foreach (config('database.connections', []) as $connName => $params)
                   $this->students->setConnection($connName);
                   $students[] = $this->students->find(1)->students;
                }
                //what is "totalAVG" ???
                $totalAvg = !empty($students) ? array_sum($students) / count($students) : 0;
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...