web-dev-qa-db-ja.com

データベースの挿入例を探しています

_db_insert_マニュアルページ によると、この関数は非推奨であり、挿入を実行するにはDrupal 8データベース接続を使用することをお勧めします。

非推奨

Drupal 8.0.x以降、Drupal 9.0.0で削除されます。代わりに、データベース接続をコンテナからサービスに挿入し、insertを呼び出します。 ()上で、たとえば、$ injected_database-> insert($ table、$ options);

どうすればデータベース接続を取得してinsert()メソッドを呼び出すことができますか?

12

データベースサービスを挿入するには、コントローラークラスに次のメソッドを追加/変更します。

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

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詳細なクラス

3
Shabir A.

まず、あなたの引用が言うように、それはDrupal 9では非推奨です。つまり、それは何年もの間残り、Drupal 8から削除されることはありません。

しかし、はい、非推奨の関数を回避することは良い考えです。他の非推奨の関数と同様に、いつでもその実装を調べて、それを実行する新しい方法を確認できます。\Drupalを呼び出すのではなく、可能な場合はデータベースやその他の必要なサービスを挿入したい(サービス、コントローラー、フォーム、プラグインなどの場合)

2
Berdir

オプション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');
1
vacho