데이터베이스 삽입 예제를 찾고


12

db_insert매뉴얼 페이지 에 따르면 이 기능은 더 이상 사용되지 않으며 Drupal 8 데이터베이스 연결을 사용하여 삽입을 수행하는 것이 좋습니다.

더 이상 사용되지 않음

Drupal 8.0.x부터 Drupal 9.0.0에서 제거 될 예정입니다. 대신 컨테이너에서 서비스에 데이터베이스 연결을 주입하고 insert ()를 호출하십시오. 예를 들어 $ injected_database-> insert ($ table, $ options);

이제 데이터베이스 연결 및 호출 insert()방법을 어떻게 얻을 수 있습니까?


서비스가 주입 된 수업 이외의 것을 의미합니까? 처럼 \Drupal::database()->insert(...);?
Clive

아니, 난 주입 서비스와 내부 클래스를 의미class PetmdController extends ControllerBase
모하마드 알리 Akbari

답변:


19

데이터베이스 서비스를 삽입하려면 컨트롤러 클래스에서 다음 메소드를 추가 / 변경하십시오.

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();
  }
}

이것은 ControllerBase에는 효과적이지만 클래스가 이미 다른 변수를 구문에 전달하는 ContentEntityBase를 확장하는 경우 데이터베이스 서비스를 어떻게 주입합니까?
Felix Eve

3

Berdir 답변에 추가하려면 컨트롤러에 데이터베이스 서비스를 주입하는 방법이 있습니다.

$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);

core/lib/Drupal/Core/Database/Query더 많은 정보를 위해 수업을 공부할 수 있습니다


2

먼저 인용문에서 알 수 있듯이 Drupal 9 에서는 더 이상 사용되지 않습니다 . 그것은 몇 년 동안 머물며 Drupal 8에서 제거되지 않을 것임을 의미합니다.

그러나 더 이상 사용되지 않는 기능을 피하는 것이 좋습니다. 더 이상 사용되지 않는 다른 함수와 마찬가지로 항상 구현을보고 새로운 방법이 어떻게 작동하는지 확인할 수 있습니다. \ Drupal을 호출하는 대신 데이터베이스 또는 가능한 경우 필요한 다른 서비스를 삽입하려고합니다 (서비스, 컨트롤러, 양식, 플러그인에있을 때 ...)


1

옵션 1:

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

옵션 2

$db = \Drupal::database();
$data = $db->query('SELECT idpr, name, code, detail FROM k_product')->fetchAllAssoc('idpr', 'name');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.