मैं वर्तमान में DBIx साथ इस परिदृश्य पर लागू करने के लिए कोशिश कर रहा हूँ:DBIx और पर्ल
package Product;
use base 'DBIx::Class::Core';
__PACKAGE__->table("products");
__PACKAGE__->add_columns(
"productId",
{ data_type => "varchar", is_nullable => 0, size => 10},
"name",
{ data_type => "varchar", is_nullable => 1, size => 150},
"type",
{
data_type => "enum",
default_value => "general",
extra => {
list => ["general", "bundle"],
},
is_nullable => 0,
});
आप देख सकते हैं, मौसम उत्पाद एक सामान्य उत्पाद है या एक बंडल उत्पाद स्तंभ प्रकार में सहेजा गया है।
अब मैं वर्ग की पहचान में यह जानकारी संपुटित चाहते हैं:
- उत्पाद (
type
कोई फर्क नहीं पड़ता) - BundleProduct (
type
= 'बंडल') : मैं निम्नलिखित वर्गों करना चाहते हैं
- GeneralProduct (
type
= 'सामान्य')
मैं ने लिखा है:
012,package BundleProduct;
use base 'Product';
__PACKAGE__->resultset_attributes({ where => { 'type' => 'bundle' } });
1;
और
package GeneralProduct;
use base 'Product';
__PACKAGE__->resultset_attributes({ where => { 'type' => 'general' } });
1;
लेकिन जब
my @allProducts = $schema->resultset('BundleProduct')->all;
क्रियान्वित सभी सामान्य उत्पादों लाई जाती हैं। यद्यपि परिणामस्वरूप ऑब्जेक्ट्स उदाहरण हैं BundleProduct
, जेनरेट किए गए एसक्यूएल में GeneralProduct
(type
= 'सामान्य' वर्ग की WHERE-condition शामिल है। इससे भी बदतर: यदि मैं Product
(BundleProduct
और GeneralProduct
की आधार श्रेणी) लाने की कोशिश करता हूं तो स्थिति type
= 'सामान्य' भी लागू होती है! ऐसा लगता है कि GeneralProduct
के भीतर परिभाषा अन्य सभी परिभाषाओं को ओवरराइट करती है।
मेरे डिजाइन में क्या गलत है?
@dreagtun धन्यवाद, लेकिन मुझे लगता है कि InflateColumn :: ऑब्जेक्ट :: Enum केवल 'वर्चर' फ़ील्ड को एप्लिकेशन के भीतर 'enum' फ़ील्ड में परिवर्तित करने के लिए नामित किया गया है। [लिंक] (http://search.cpan.org/~jmmills/DBIx-Class-InflateColumn-Object-Enum-0.04/lib/DBIx/Class/InflateColumn/Object/Enum.pm) –
प्रदान किए गए परीक्षणों को देखते हुए 'डीबीआईएक्स :: कक्षा :: इन्फ्लैट कॉलम :: ऑब्जेक्ट :: एनम 'मॉड्यूल द्वारा लेखक हमेशा घटक लोड करता है और' is_enum => 1' भी सेट करता है। यहां परीक्षण है जो आप अपने उदाहरण में जो करने की कोशिश कर रहे हैं उससे मेल खाता है: https://metacpan.org/source/JMMILLS/DBIx-Class-InflateColumn-Object-Enum-0.04/t/lib/TestDB/NativeEnumNoneNullable.pm लेखक हो सकता है कि उत्साही हो लेकिन शायद यह कोशिश करने लायक हो। लेखक भी 'default_value' परीक्षण नहीं प्रदान करता है, इसलिए वहां कोई समस्या हो सकती है? वैसे भी मैंने तदनुसार अपना जवाब अपडेट कर लिया है। – draegtun