Điểm:2

Cách kiểm tra xem định nghĩa cơ sở dữ liệu thứ cấp có tồn tại không

lá cờ fr

Ai đó có thể vui lòng giúp tôi về cách kiểm tra xem cơ sở dữ liệu thứ cấp đã được đặt chưa. Nếu không ném một lỗi.

Tôi hiện đang xác định kết nối cơ sở dữ liệu như bên dưới.

Cơ sở dữ liệu::getConnection('default', 'sqlite')

Tôi đang cố gắng xác định điều kiện if , other dựa trên cơ sở dữ liệu xác định.

Khi tôi cố gắng

if(Database::getConnection('default', 'sqlite')){
  tiếng vang thành công;
}khác {
  tiếng vang thất bại;
}

Tôi nhận được lỗi dưới đây. Nếu định nghĩa cơ sở dữ liệu phụ không được xác định trong settings.php

Drupal\Core\Entity\EntityStorageException: 
Kết nối cơ sở dữ liệu được chỉ định không được xác định: sqlite trong Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (dòng 811 của core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).
Điểm:2
lá cờ us

Để kiểm tra xem một kết nối đã được xác định chưa, tôi sẽ sử dụng mã tương tự như sau.

if ($connections = Database::getAllConnectionInfo() && isset($connections['default']['sqlite'])) {
  // Kết nối được xác định.
} 

Cơ sở dữ liệu::getConnection() trả về một đối tượng kết nối và nó có thể trả về một đối tượng cho máy chủ mặc định/chính, khi thông tin được yêu cầu dành cho một kết nối bị bỏ qua hoặc kết nối được yêu cầu không được xác định.

  // Nếu mục tiêu được yêu cầu không tồn tại hoặc nếu nó bị bỏ qua, chúng tôi sẽ quay lại
  // đến mục tiêu mặc định. Mục tiêu thường là "mặc định" hoặc
  // "bản sao", cho biết sử dụng máy chủ SQL bản sao nếu có sẵn. Nếu
  // nó không khả dụng, thì máy chủ mặc định/chính là máy chủ chính xác
  // để sử dụng.
  if (!empty(self::$ignoreTargets[$key][$target]) || !isset(self::$databaseInfo[$key][$target])) {
    $ target = 'mặc định';
  }
  if (!isset(self::$connections[$key][$target])) {

    // Nếu cần, một kết nối mới sẽ được mở.
    self::$connections[$key][$target] = self::openConnection($key, $target);
  }

Điều này có nghĩa là mong đợi một ngoại lệ từ Cơ sở dữ liệu::getConnection() khi kết nối không được xác định là sai.

miststudent2011 avatar
lá cờ fr
Cảm ơn nó tốt hơn câu trả lời khác.
Điểm:1
lá cờ id
cố gắng {
    $connection = Cơ sở dữ liệu::getConnection('default', 'sqlite');
}
bắt (Drupal\Core\Entity\EntityStorageException $e) {
    // Làm gì đó ở đây.
}
cuối cùng {
    // Không bắt buộc: làm gì trong mọi trường hợp.
}
miststudent2011 avatar
lá cờ fr
Cảm ơn, nó hoạt động. Nhưng chỉ tự hỏi liệu chúng ta có bất kỳ phương pháp nào trong lõi để kiểm tra xem kết nối có tồn tại hay không. Một cái gì đó như `hasConnection()`
Điểm:-1
lá cờ fr

Mặc du cilefen chỉ cho tôi đi đúng hướng. Nó vẫn đưa ra lỗi nghiêm trọng khi sử dụng câu trả lời của cilefen. Tôi có thể giải quyết vấn đề này bằng cách sửa đổi một chút cách xử lý ngoại lệ.

cố gắng {
  $connection = Cơ sở dữ liệu::getConnection('default', 'sqlite');
} bắt (\Ngoại lệ $e) {
  return new \Exception("Cấu hình cơ sở dữ liệu SQLite chưa được thiết lập.", 1);
}

Đã tạo ra một vấn đề cốt lõi #3282024 để thêm phương thức gốc để kiểm tra kết nối cơ sở dữ liệu.

lá cờ id
Bạn có thể cần một dấu gạch chéo trước ngoại lệ, như \Drupal\Core\Entity\EntityStorageException. \Exception có thể là bất cứ thứ gì.
miststudent2011 avatar
lá cờ fr
Thêm dấu gạch chéo tạo ra lỗi tương tự.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.