_db_insert
_マニュアルページ によると、この関数は非推奨であり、挿入を実行するにはDrupal 8データベース接続を使用することをお勧めします。
非推奨
Drupal 8.0.x以降、Drupal 9.0.0で削除されます。代わりに、データベース接続をコンテナからサービスに挿入し、insertを呼び出します。 ()上で、たとえば、$ injected_database-> insert($ table、$ options);
どうすればデータベース接続を取得してinsert()
メソッドを呼び出すことができますか?
データベースサービスを挿入するには、コントローラークラスに次のメソッドを追加/変更します。
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();
}
}
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
詳細なクラス
まず、あなたの引用が言うように、それはDrupal 9では非推奨です。つまり、それは何年もの間残り、Drupal 8から削除されることはありません。
しかし、はい、非推奨の関数を回避することは良い考えです。他の非推奨の関数と同様に、いつでもその実装を調べて、それを実行する新しい方法を確認できます。\Drupalを呼び出すのではなく、可能な場合はデータベースやその他の必要なサービスを挿入したい(サービス、コントローラー、フォーム、プラグインなどの場合)
オプション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');