একই আইডি "এক্সএক্সএক্স" ইতিমধ্যে বিদ্যমান "আমি কীভাবে" আইটেম (ম্যাজ_ক্যাটালগ_মোডেল_প্রডাক্ট) ঠিক করতে পারি?


18

কোনও পণ্য সংগ্রহ ফিল্টার করার চেষ্টা করার সময় আমি এই ত্রুটিটি পেয়েছি

Item (Mage_Catalog_Model_Product) with the same id "6058" already exist এবং জানতে চেয়েছিলেন যে ত্রুটি সৃষ্টি করতে পারে না কারণ ম্যাজেন্টোর ভিতরে একই আইডি সহ কেবলমাত্র একটি (দৃশ্যমান) পণ্য রয়েছে।

এই ছদ্মবেশটি সরাতে এমন কোনও টেবিল আছে যা সাফ করার দরকার আছে?


আপনি কিছু কোড যুক্ত করতে পারেন? আপনাকে group byকেবল অনন্য পণ্য আইডি পেতে ব্যবহার করতে হবে। Magento.stackexchange.com
রেনন স্টুয়ার্ট

@ আরএস, হাই, আমি এখনও কারণটির সন্ধান করার চেষ্টা করছি আমি এটি ট্র্যাক করার সাথে সাথেই আবার পোস্ট করব ...
ব্যবহারকারীর704524

উত্তর:


36

distinctগৃহীত উত্তরে প্রস্তাবিত হিসাবে যুক্ত করা সমস্যার সমাধান করে তবে এতে পারফরম্যান্স সংক্রান্ত সমস্যা রয়েছে। ডাটাবেস ডিস্কে অস্থায়ী টেবিলগুলি তৈরি করতে পারে যখন কোনও ক্যোয়ারী চালিয়ে distinctযাওয়ার সময় এটি আপনার অনুরোধটি কমিয়ে দেবে। পরিবর্তে groupসদৃশগুলি অপসারণ করতে আপনি সংগ্রহে একটি শর্ত যুক্ত করতে পারেন।

এই পোস্টে একবার দেখুন । তারা যা করেছে (এবং আমি এটিও করেছি) তা সত্তা আইডি দ্বারা গোষ্ঠীযুক্ত। এটি আরও ভাল পারফরম্যান্স করা উচিত।

//adding filters to the collection..

$collection->getSelect()
           ->group('e.entity_id');

আপনি দয়া করে বলতে পারেন আমাদের এই কোডটি কোথায় যুক্ত করতে হবে
বেবি ইন ম্যাজেন্টো

আপনি এখানে আপনার সংগ্রহটি আপনার কাস্টম কোডটিতে ব্যবহার করছেন বাবাইন ম্যাগান্টো এই ত্রুটিটি যখন কাস্টম মডিউলগুলি তৈরি করে যা ডেটাবেস থেকে সংগ্রহগুলি নিয়ে আসে। এর অর্থ আপনি সম্প্রতি তৃতীয় পক্ষের মডিউল ইনস্টল করে থাকলে এটি প্রদর্শিত হতে পারে। সেক্ষেত্রে ত্রুটির অবস্থান নির্ধারণের জন্য এটি মডিউলটির বিকাশকারী।
ভিক

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

সংক্ষিপ্ত দ্রষ্টব্য: এটি সংগ্রহের সাথে এটি শৃঙ্খলাবদ্ধ না করার জন্য এর উত্স, তবে আপনার সমাহারটি একটি পরিবর্তনশীলতে এবং $ সংগ্রহ-> getSelect () -> গোষ্ঠী ('e.entity_id') এর চেয়ে বেশি করুন;
রিকার্ট

আমি এই কোডটি কোথায় আপডেট করতে পারি?
zus

7

সাধারণত, এটি ডেটা বা সংগ্রহের প্রয়োগের মধ্যে একটি বাগ।

এখানে একটি বিস্তৃত সমস্যার সমাধান। এটি স্বেচ্ছাসেবী সংগ্রহের জন্য কাজ করে, কেবল এটির জন্য নয় Catalog_Model_Product

ধাপ 1 পরিবর্তন কোর ফাইল lib/Varien/Data/Collection.php, function addItem()কিন্তু অসদৃশ এই উত্তরটি প্রস্তাব দেওয়া, ত্রুটি আড়াল করে না।

পরিবর্তে, নিক্ষিপ্ত ব্যতিক্রমটিতে অতিরিক্ত ত্রুটির তথ্য যুক্ত করুন:

        if (isset($this->_items[$itemId])) {
            throw new Exception('Item ('.get_class($item).
                ') with the same id "'.$item->getId().'" already exist' .
                '. SQL that caused this: ' . $this->getSelect());
        }

পদক্ষেপ 2. আপনার ত্রুটি প্রতিবেদন থেকে আপত্তিজনক ক্যোয়ারী নিন এবং এটি হাতে হাতে চালান। সংগ্রহ কী কী নথিগুলি নকল করে তা দেখুন। যোগ order by <key field>হিসাবে প্রয়োজন।

অংশগ্রহনকারী টেবিলগুলি একে অপরকে সরিয়ে ক্যোয়ারী বিছিন্ন করুন এবং দেখুন যে কোনও রেকর্ডটির সদৃশ হয়েছে।

আমি বিশ্বাস করি এই প্যাচটি মূল হওয়া উচিত।


3

আপনার সমস্যাটি হ'ল আপনার কাছে একটি সংগ্রহ রয়েছে (সম্ভবত কোনও যোগ দিন বা ইউনিয়নের সাথে) যা ফলস্বরূপ একই পণ্যটিকে দু'বার সংগ্রহের মধ্যে লোড করা হয়।

আপনি নির্বাচিত বস্তুটিতে একটি স্বতন্ত্র পদ্ধতি যুক্ত করে লোড হওয়া সংগ্রহকে পরিবর্তন করতে পারেন।

Http://framework.zend.com/manual/1.12/en/zend.db.select.html দেখুন

$db->select()
         ->distinct()

তবে এটি সহজাত সমস্যা নিয়ে আসে। স্বতন্ত্র ব্যবহারের ফলে অস্থায়ী টেবিলগুলি ডিস্কে তৈরি হবে, মেমরিতে নয়, যা পারফরম্যান্সের জরিমানার সাথে আসে।


0

আমার ক্ষেত্রে

->getSelect()->group('e.entity_id');

আমি ব্যবহার করছি না কাজ করছি:

->getSelect()->group('main_table.entity_id');

মাদুরও হ'ল একাধিক ব্যক্তির জন্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.