সংগ্রহ ব্যবহার করে ম্যাজেন্টো টেবিলটি কীভাবে কাটাবেন?


23

আমার একটি কাস্টম টেবিল আছে আমি এসকিউএল কোয়েরি ছাড়াই ম্যাজেন্টো সংগ্রহ ব্যবহার করে টেবিলটি কাটাতে চাই ।

আশা করি কেউ কেউ কিছু দরকারী তথ্য সরবরাহ করবেন।


আপনার অর্থ কি আপনি কিছু শর্তের ভিত্তিতে কিছু সারি মুছতে চান?
সুবেশ পোখরেল

না, আমার সমস্ত রেকর্ড মুছে ফেলতে হবে এবং অটো
বর্ধিতকরণ আইডিটি

উত্তর:


18

ম্যাজেন্টো এর পক্ষে সমর্থন নেই (যতদূর আমি জানি)
তবে আপনি আপনার সংস্থান মডেলটিতে (সংগ্রহ সংস্থান মডেল নয়) এমন একটি পদ্ধতি প্রয়োগ করতে পারেন যা টেবিলটি কেটে যাবে।
এটার মতো কিছু:

public function truncate() {
    $this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
    return $this;
}

তারপরে আপনি এটিকে আপনার কোডটিতে কল করতে পারেন:

Mage::getResourceModel('[module]/[entity]')->truncate();

তবে এটি একটি অত্যন্ত বিপজ্জনক পদ্ধতির। truncateবিবৃতি বিরতি লেনদেন, তাই এটি ক্ষেত্রে ফিরে ঘূর্ণিত করা যাবে না আপনাকে হতে হবে।
আমি পরিবর্তে টেবিলের প্রতিটি সত্তা মোছার পরামর্শ দিই।

$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
    $item->delete();
}

এর নীচের দিকটি এটি টেবিলের ইনক্রিমেন্ট আইডিটিকে পুনরায় সেট করে না doesn't তবে এটি নিরাপদ।

সম্পাদনা
প্রধান সারণীর ইনক্রিমেন্ট আইডি আপডেট করতে আপনি আপনার সংস্থান মডেলটিতে একটি নতুন পদ্ধতি যুক্ত করতে পারেন যা এরকম কিছু করে।

public function changeAutoIncrement($increment = 1) {
    $this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}

তারপরে কোডটিতে আপনার পদ্ধতিটি কল করুন:

Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();

2
আপনি কি আমাকে আগে থেকেই ম্যাজেন্টো.ধন্যবাদে তিন ধরণের মডেল বলতে পারবেন
মীনাক্ষীসুন্দরাম আর

3
@MeenakshiSundaramR। সত্তা মডেল আছে। উদাহরণ: Mage_Catalog_Model_Product। সংস্থান মডেল আছে। উদাহরণ: Mage_Catalog_Model_Resource_Product। এবং সংগ্রহ সংস্থান মডেল আছে Mage_Catalog_Model_Resource_Product_Collection
মারিয়াস

2
@ মারিয়াস আপনি কি আমাকে বলতে পারবেন কীভাবে ম্যাজেন্টো সংগ্রহে উপলব্ধ অটো ইনক্রিমেন্ট আইডি (যার অর্থ 1 দিয়ে শুরু হবে) আপডেট করবেন।
বিজয়S91

2
@VijayS। উত্তরে আমার আপডেট দেখুন।
মারিউস

@ মারিয়াস আমার একটি সন্দেহ আছে তাহলে ফ্ল্যাট মডেল এবং ইএভি মডেল কী?
মীনা

11
$model = Mage::getModel('[module]/[model]');
$resource = $model->getResource();
$connection = $resource->getReadConnection();
/* @see Varien_Db_Adapter_Pdo_Mysql */
$connection->truncateTable($resource->getMainTable());
$connection->changeTableAutoIncrement($resource->getMainTable(), 1);

দ্রষ্টব্য: মাইএসকিউএল 1যখন কোনও টেবিলটি কাটা হয় তখন স্বতঃসংশোধের মানটি পুনরায় সেট করে , সুতরাং এটির প্রয়োজন হয় না, তবে changeTableAutoIncrementযদি কেউ অন্য মান দিয়ে এআই শুরু করতে চায় তবে দরকারী হতে পারে।


সম্পাদনা:

এই প্রশ্নটি / সাথে ট্যাগ করা হয়েছিল ... কেবল উত্তরটি সম্পূর্ণ করতে:

  • changeTableAutoIncrement 1.8.0.1 এ যুক্ত হয়েছিল
  • truncateTable 1.6.0.0-alpha1 এ যুক্ত হয়েছিল

-1

আমি একটি মডেল তৈরি করেছি এবং কিছু বিকাশের জন্য আমাকে মোছার পদ্ধতিটি প্রয়োগ করতে হয়েছিল। এটা খুব সহজ. আমি শর্তসাপেক্ষে মোছার জন্যও চেষ্টা করি তবে আমি সঠিক কোড পাইনি। তবে আমি নিম্নলিখিত কোডটি ব্যবহার করছি যা শর্তাধীন মোছার জন্য আপনার প্রয়োজনীয়তা পূরণ করবে।

$items = Mage::getModel('custom/csaabandonedcart')->getCollection()
    ->addFieldToFilter('csa_id',Mage::getSingleton('customer/session')
    ->getCustomerId())->addFieldToFilter('customer_id', $retailer)
    ->addFieldToFilter('product_id', $spid);

foreach ($items as $item) {
        $item->delete();
}

1
আমি টেবিলটি কাটা সম্পর্কে জিজ্ঞাসা করছি। রেকর্ড মুছতে হবে না।
বিজয়এস 91

আপনি নিম্নলিখিত কোড ব্যবহার করে করতে পারেন। আপনি যদি উপরের কোডের রেফারেন্সটি বিবেচনা করেন। $ items-> আরোপ করা ();
সাপানন্দু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.