ডাটাবেস সন্নিবেশ উদাহরণ খুঁজছেন


12

db_insertম্যানুয়াল পৃষ্ঠা অনুসারে এই ফাংশনটি অবচিত করা হয়েছে এবং সন্নিবেশ সম্পাদনের জন্য ড্রুপাল 8 ডাটাবেস সংযোগটি ব্যবহার করা ভাল।

অসমর্থিত

দ্রুপাল 8.0.x হিসাবে, দ্রুপাল 9.0.0 এ সরানো হবে। পরিবর্তে, ধারক থেকে আপনার সেবার মধ্যে একটি ডাটাবেস সংযোগ ইনজেকশন পান এবং এতে কল সন্নিবেশ () করুন। উদাহরণস্বরূপ, $ ইনজেকশন_ডেটবেস-> সন্নিবেশ ($ টেবিল, $ বিকল্পগুলি);

এখন আমি কীভাবে একটি ডেটাবেস সংযোগ এবং কল insert()পদ্ধতি পেতে পারি ?


আপনি কি ইনজেকশন পরিষেবা সহ কোনও শ্রেণির বাইরে বোঝাতে চান? পছন্দ \Drupal::database()->insert(...);?
ক্লাইভ

ইনজেকশন পরিষেবাদি সহ আমার ক্লাসের অভ্যর্থনা নেইclass PetmdController extends ControllerBase
মোহাম্মদ আলী আকবরী

উত্তর:


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

এটি কন্ট্রোলারবেসের জন্য দুর্দান্ত কাজ করে, তবে আমার ক্লাসটি ইতিমধ্যে কনস্ট্রাক্টের মধ্যে বিভিন্ন ভেরিয়েবলগুলি অতিক্রম করে থাকা কনটেন্টসেন্টিটিবেস প্রসারিত করলে আমি কীভাবে ডাটাবেস পরিষেবা ইনজেক্ট করব?
ফেলিক্স ইভ

3

বারদিরের উত্তর যুক্ত করতে এখানে আপনি কীভাবে আপনার নিয়ামকটিতে আপনার ডাটাবেস পরিষেবাটি ইনজেক্ট করতে পারেন

$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

প্রথমত, আপনার উক্তিটি যেমনটি বলেছে, এটি ড্রুপাল 9 এর জন্য অবচিত করা হয়েছে । যার অর্থ এটি বছরের পর বছর ধরে থাকবে এবং ড্রুপাল 8 থেকে কখনও সরানো হবে না।

তবে হ্যাঁ, অবহেলিত কার্যগুলি এড়াতে এটি একটি ভাল ধারণা। অন্য যে কোনও অবহেলিত ফাংশনটির মতো, আপনি এটি করার নতুন উপায়টি কীভাবে তা দেখতে সর্বদা কেবল এর প্রয়োগের দিকে নজর দিতে পারেন। যদিও \ দ্রুপালকে কল করার পরিবর্তে, আপনি যখন সম্ভব হয় তখন আপনি প্রয়োজন ডাটাবেস বা অন্য যে কোনও পরিষেবা ইনজেক্ট করতে চান (যখন আপনি কোনও পরিষেবাতে, নিয়ামক, ফর্ম, প্লাগইন, ...)


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.