आप उपयोग कर सकते हैं register_source
package My::Schema::User;
use base qw/DBIx::Class/;
# ->load_components, ->table, ->add_columns, etc.
# Make a new ResultSource based on the User class
my $source = __PACKAGE__->result_source_instance();
my $new_source = $source->new($source);
$new_source->source_name('UserFriendsComplex');
# Hand in your query as a scalar reference
# It will be added as a sub-select after FROM,
# so pay attention to the surrounding brackets!
$new_source->name(\<<SQL);
(SELECT u.* FROM user u
INNER JOIN user_friends f ON u.id = f.user_id
WHERE f.friend_user_id = ?
UNION
SELECT u.* FROM user u
INNER JOIN user_friends f ON u.id = f.friend_user_id
WHERE f.user_id = ?)
SQL
# Finally, register your new ResultSource with your Schema
My::Schema->register_source('UserFriendsComplex' => $new_source);
मानकों के साथ कॉल करने के लिए नहीं, DBIx :: कक्षा के संदर्भ में एक संग्रहीत प्रक्रिया निष्पादित करने के लिए कोई उचित तरीका है।
जहां तक मेरा बताओ, एक समाधान के निकटतम बात एक डेटाबेस संभाल, जो कमजोर सूप है पाने के लिए "ORM का उपयोग कर" है कर सकते हैं:
my @results = $schema->storage->dbh_do(sub{
my ($storage, $dbh, @args) = @_;
my $sth = $dbh->prepare('call storedProcNameFooBar()');
my @data;
$sth->execute();
while(my $row = $sth->fetchrow_hashref){
push @data, $row;
}
return @data;
},());
[पर
http://metacpan.org/pod/DBIx::Class::Storage::DBI#dbh_do विवरण देखने]
... क्योंकि आपको अपनी परेशानी के लिए ओआरएम के लाभों में से कोई भी लाभ नहीं मिलता है।
'डीबीआईएक्स :: कक्षा :: मैनुअल :: कुकबुक' दस्तावेज़ अनुभाग 'डेटाबेस फ़ंक्शंस या संग्रहीत प्रक्रियाओं का उपयोग करना', हालांकि @stevenl ने इंगित किया है कि यह एमएस एसक्यूएल सर्वर के साथ मदद नहीं करेगा, क्योंकि यह स्पष्ट रूप से संग्रहीत प्रक्रिया तक नहीं पहुंच सकता है एक चयन कथन के माध्यम से। – LeeGee
न ही MySQL, और मेरा अनुमान ओरेकल नहीं है। मुझे आश्चर्य है कि क्या डीबीआईएक्स: क्लास मैनुअल लेखक बस इसे बना रहा है। – djsadinoff
दरअसल - और अपेक्षित व्यवहार क्या होगा? डीबीआईसी कैसे पता लगाएगा जिसके परिणामस्वरूप संग्रहीत प्रक्रिया या कार्य द्वारा लौटाए गए डेटा को संबद्ध करना है? मुझे लगता है कि लेखक का अर्थ 'फंक्शन' एसक्यूएल-फ़ंक्शन में है, क्योंकि 'लंबाई' उदाहरण है। यह समझा नहीं जाता कि 'संग्रहीत प्रक्रिया' कैसे जोड़ा गया। – LeeGee