यह सुविधाजनक है कि लार्वेल मॉडल एक विधि प्रदान करता है कि यह किसी अन्य संबंधित तालिका से परिणाम वापस कर सकता है।क्यों लार्वा मॉडल डेटा का सेट डुप्लिकेट करता है और कैसे (यदि संभव हो) डेटा का केवल एक सेट है?
उदाहरण के लिए, मैं एक मेज बुलाया आइटम और प्रतिक्रिया नामक एक और मेज, जहां आइटम तालिका में आइटम की प्रतिक्रिया तालिका भंडार प्रतिक्रिया। तो, आईडी के साथ 1 आइटम के सभी प्रतिक्रिया प्राप्त करने, मुझे क्या करना होगा:
Item::find(1)->feedback;
और निम्नलिखित इस वस्तु का प्रिंटआउट लौट आए।
Illuminate\Database\Eloquent\Collection Object
( [items:protected] => Array
(
[0] => Feedback Object
(
[table:protected] => feedback
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[id] => 1
[rma_id] => 3
[item_id] => 8
[quo_id] => 0
[case_id] => i2eM20160120
[line_no] => 000001
[content] => test
[status] => sent
[read] => 0
[sender] => Tester
[created_at] => 2016-01-20 18:03:44
[updated_at] => 2016-01-20 18:03:44
)
[original:protected] => Array
(
[id] => 1
[rma_id] => 3
[item_id] => 8
[quo_id] => 0
[case_id] => i2eM20160120
[line_no] => 000001
[content] => test
[status] => sent
[read] => 0
[sender] => Tester
[created_at] => 2016-01-20 18:03:44
[updated_at] => 2016-01-20 18:03:44
)
[relations:protected] => Array
(
)
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[appends:protected] => Array
(
)
[fillable:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
[dates:protected] => Array
(
)
[touches:protected] => Array
(
)
[observables:protected] => Array
(
)
[with:protected] => Array
(
)
[morphClass:protected] =>
[exists] => 1
)
)
)
यह ठीक काम करता है, और यह पता चलता आईडी 1.
साथ आइटम पर केवल एक ही प्रतिक्रिया क्या चिंताओं मुझे उस डाटासेट [attributes:protected]
और [original:protected]
में दोहराया गया है है नहीं है। यह सिर्फ एक परीक्षण मामला है और वास्तविक मामले में हजारों फीडबैक होंगे और एक डुप्लिकेट डेटासेट होने से स्मृति का एक बड़ा अपशिष्ट होगा। यदि मैं DB::table('table_name')
दृष्टिकोण का उपयोग कर रहा हूं, तो डेटासेट डुप्लिकेट नहीं किया गया है, लेकिन यह बहुत कम सुविधाजनक है।
क्यों laravel मॉडल में डेटा नकल करने की जरूरत है?
और वहाँ यह डेटा का केवल एक सेट वापसी बनाने के लिए एक तरीका है?
वर्तमान में मैं क्वेरी के बाद अनावश्यक डेटा को कम करने के लिए ->toArray()
का उपयोग कर रहा हूं, लेकिन स्मृति उपयोग अभी भी वहां है क्योंकि लार्वेल अभी भी डेटा का सेट बना रहा है।
तकनीकी तौर पर आप जिस तरह से सुवक्ता तो वस्तुओं उत्पन्न करता है पसंद नहीं है:
कृपया विवरण के लिए इस लिंक को देख। एक ओआरएम का उपयोग करें जो आप करते हैं या अपना कोड लिखते हैं और फिर वालोकेंट अक्षम करते हैं। – Pitchinnate
ओआरएम के लिए कोई सुझाव? @ पिचिनेट – cytsunny
निश्चित नहीं है, आपको अलग-अलग ओआरएम द्वारा लौटाए गए सभी अलग-अलग ढांचे को देखना होगा जो आपको पसंद है और ऐसा लगता है कि स्मृति बर्बाद नहीं कर रहा है। सबसे बड़ा PHP आधारित ओआरएम जिसे मैं जानता हूं वह सिद्धांत है। – Pitchinnate