Score:2

วิธีตรวจสอบว่ามีข้อกำหนดฐานข้อมูลรองอยู่หรือไม่

ธง fr

ใครก็ได้โปรดช่วยฉันด้วยวิธีการตรวจสอบว่ามีการตั้งค่าฐานข้อมูลรองหรือไม่ หากไม่โยนข้อผิดพลาด

ฉันกำลังกำหนดการเชื่อมต่อฐานข้อมูลตามด้านล่าง

ฐานข้อมูล::getConnection('ค่าเริ่มต้น', 'sqlite')

ฉันกำลังพยายามกำหนด a if เงื่อนไขอื่นตามฐานข้อมูลที่กำหนด

เมื่อฉันพยายาม

ถ้า(ฐานข้อมูล::getConnection('default', 'sqlite')){
  สะท้อนความสำเร็จ;
}อื่น {
  เสียงสะท้อนล้มเหลว
}

ฉันได้รับข้อผิดพลาดด้านล่าง หากไม่ได้กำหนดคำจำกัดความของฐานข้อมูลรองใน settings.php

Drupal\Core\Entity\EntityStorageException: 
ไม่ได้กำหนดการเชื่อมต่อฐานข้อมูลที่ระบุ: sqlite ใน Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (บรรทัดที่ 811 ของ core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php)
Score:2
ธง us

ในการตรวจสอบว่ามีการกำหนดการเชื่อมต่อหรือไม่ ฉันจะใช้โค้ดที่คล้ายกับโค้ดต่อไปนี้

ถ้า ($connections = ฐานข้อมูล::getAllConnectionInfo() && isset($connections['default']['sqlite'])) {
  // กำหนดการเชื่อมต่อแล้ว
} 

ฐานข้อมูล::getConnection() ส่งคืนออบเจกต์การเชื่อมต่อ และสามารถส่งคืนวัตถุสำหรับเซิร์ฟเวอร์เริ่มต้น/เซิร์ฟเวอร์หลัก เมื่อข้อมูลที่ร้องขอมีไว้สำหรับการเชื่อมต่อที่ถูกละเว้นหรือไม่ได้กำหนดการเชื่อมต่อที่ร้องขอ

  // หากไม่มีเป้าหมายที่ร้องขอหรือหากเป้าหมายถูกเพิกเฉย เราจะถอยกลับ
  // ไปยังเป้าหมายเริ่มต้น เป้าหมายมักจะเป็น "ค่าเริ่มต้น" หรือ
  // "จำลอง" ระบุว่าจะใช้เซิร์ฟเวอร์ SQL จำลองถ้ามี ถ้า
  // ไม่พร้อมใช้งาน ดังนั้นเซิร์ฟเวอร์เริ่มต้น/หลักคือเซิร์ฟเวอร์ที่ถูกต้อง
  // ใช้.
  ถ้า (!empty(self::$ignoreTargets[$key][$target]) || !isset(self::$databaseInfo[$key][$target])) {
    $target = 'ค่าเริ่มต้น';
  }
  ถ้า (!isset(ตัวเอง::$connections[$key][$target])) {

    // หากจำเป็น การเชื่อมต่อใหม่จะเปิดขึ้น
    self::$connections[$key][$target] = self::openConnection($key, $target);
  }

ซึ่งหมายความว่าคาดว่าจะมีข้อยกเว้นจาก ฐานข้อมูล::getConnection() เมื่อไม่ได้กำหนดการเชื่อมต่อไว้ผิด

miststudent2011 avatar
fr flag
ขอบคุณมันดีกว่าคำตอบอื่น ๆ
Score:1
ธง id
พยายาม {
    $connection = Database::getConnection('default', 'sqlite');
}
catch (Drupal\Core\Entity\EntityStorageException $e) {
    //มาทำอะไรที่นี่
}
ในที่สุด {
    // ทางเลือก: ทำบางอย่างในกรณีใด ๆ
}
miststudent2011 avatar
fr flag
ขอบคุณมันใช้งานได้ แต่แค่สงสัยว่าเรามีวิธีใดในแกนเพื่อตรวจสอบว่ามีการเชื่อมต่ออยู่หรือไม่ บางอย่างเช่น `hasConnection()`
Score:-1
ธง fr

แม้ว่า ไซเลเฟน ชี้ให้ฉันเห็นทิศทางที่ถูกต้อง มันยังคงแสดงข้อผิดพลาดร้ายแรงเมื่อใช้คำตอบของ cilefen ฉันสามารถแก้ไขปัญหานี้ได้โดยการปรับเปลี่ยนการจัดการข้อยกเว้นเล็กน้อย

พยายาม {
  $connection = Database::getConnection('default', 'sqlite');
} จับ (\ข้อยกเว้น $e) {
  ส่งคืน \Exception ใหม่ ("การกำหนดค่าฐานข้อมูล SQLite ไม่ได้ตั้งค่า", 1);
}

สร้างปัญหาหลัก #3282024 เพื่อเพิ่มวิธีการดั้งเดิมเพื่อตรวจสอบการเชื่อมต่อฐานข้อมูล

id flag
คุณอาจต้องใช้เครื่องหมายทับก่อนข้อยกเว้น เช่น \Drupal\Core\Entity\EntityStorageException \ข้อยกเว้นสามารถเป็นอะไรก็ได้
miststudent2011 avatar
fr flag
การเพิ่มเครื่องหมายทับทำให้เกิดข้อผิดพลาดเดียวกัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา