Tìm kiếm ví dụ chèn cơ sở dữ liệu


12

Theo db_inserttrang thủ công , chức năng này không được dùng nữa và tốt hơn là sử dụng kết nối cơ sở dữ liệu Drupal 8 để thực hiện thao tác chèn.

Không dùng nữa

kể từ Drupal 8.0.x, sẽ bị xóa trong Drupal 9.0.0. Thay vào đó, hãy kết nối cơ sở dữ liệu được đưa vào dịch vụ của bạn từ container và gọi insert () trên đó. Ví dụ: $ in tiêm_database-> insert (bảng $, $ tùy chọn);

Bây giờ làm thế nào tôi có thể có được một kết nối cơ sở dữ liệu và insert()phương thức gọi ?


Bạn có nghĩa là bên ngoài một lớp học với các dịch vụ tiêm? Giống như \Drupal::database()->insert(...);?
Clive

Không, ý tôi là bên trong lớp học với các dịch vụ được tiêmclass PetmdController extends ControllerBase
Mohammad Ali Akbari

Câu trả lời:


19

Để tiêm dịch vụ cơ sở dữ liệu, thêm / thay đổi các phương thức sau trong lớp trình điều khiển của bạn:

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Database\Connection;
use Symfony\Component\DependencyInjection\ContainerInterface;

class PetmdController extends ControllerBase {

  protected $database;

  public function __construct(Connection $database) {
    $this->database = $database;
  }

  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('database')
    );
  }

  public function foo() {
    $this->database->insert(...)->fields(...)->execute();
  }
}

Điều này hoạt động rất tốt cho ControllerBase, nhưng tôi sẽ tiêm dịch vụ cơ sở dữ liệu như thế nào nếu lớp của tôi đang mở rộng ContentEntityBase đã chuyển các biến khác nhau vào cấu trúc?
Đêm giao thừa

3

Để thêm vào câu trả lời của Berdir ở đây là cách bạn có thể đưa dịch vụ cơ sở dữ liệu của mình vào bộ điều khiển

$db = \Drupal::database();
      $query = $db->select('location','loc');
      $query->fields('loc', array('id', 'name', 'bond_goal','deposit_goal','date_created','date_updated'));
      $query->addField('loc','name','location_title');
      $table_sort = $query->extend('Drupal\Core\Database\Query\TableSortExtender')->orderByHeader($header);
      $pager = $table_sort->extend('Drupal\Core\Database\Query\PagerSelectExtender')->limit(10);

Bạn có thể học core/lib/Drupal/Core/Database/Querycác lớp để biết thêm thông tin


2

Đầu tiên, như trích dẫn của bạn, nó không được dùng cho Drupal 9 . Điều đó có nghĩa là nó sẽ tồn tại trong nhiều năm và sẽ không bị xóa khỏi Drupal 8 bao giờ.

Nhưng có, đó là một ý tưởng tốt để tránh các chức năng không dùng nữa. Giống như bất kỳ chức năng không dùng nữa, bạn luôn có thể chỉ cần nhìn vào cách thực hiện của nó để xem cách thức thực hiện mới. Mặc dù thay vì gọi tới \ Drupal, bạn muốn tiêm cơ sở dữ liệu hoặc bất kỳ dịch vụ nào khác bạn cần khi có thể (khi bạn đang ở trong một dịch vụ, bộ điều khiển, biểu mẫu, plugin, ...)


1

Lựa chọn 1:

$db = \Drupal::database();
$query = $db->select('k_product', 'p');
$query->fields('p', ['idpr', 'name', 'type']);
$data = $query->execute()->fetchAllAssoc('idpr', 'name', 'type');

Lựa chọn 2

$db = \Drupal::database();
$data = $db->query('SELECT idpr, name, code, detail FROM k_product')->fetchAllAssoc('idpr', 'name');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.