लार्वा लूप में विशिष्ट कॉलम का चयन कैसे करें


138

मान लें कि मेरे पास तालिका में 7 कॉलम हैं, और मैं उनमें से केवल दो का चयन करना चाहता हूं, ऐसा कुछ

SELECT `name`,`surname` FROM `table` WHERE `id` = '1';

लार्वा लूप मॉडल में ऐसा लग सकता है

Table::where('id', 1)->get();

लेकिन मुझे लगता है कि यह अभिव्यक्ति सभी कॉलम का चयन करेगी जहां आईडी 1 के बराबर है, और मुझे केवल दो कॉलम (नाम, उपनाम) चाहिए। केवल दो कॉलम कैसे चुनें?


सवाल पूछने के लिए धन्यवाद। यह पागल है क्योंकि मैंने हमेशा इसे 'क्लासिक' एसक्यूएल प्रश्नों में ठीक से किया है, लेकिन एलोकेंट का उपयोग करने के लिए, मैंने पाया कि मैं इसे काम करने के लिए खुश था, और यह इस बात से बेखबर था कि मेरे प्रश्नों का कितनी स्मृति से उपयोग किया जा रहा है क्योंकि मैं सब कुछ का चयन कर रहा था।
जॉनी पर्ल

जवाबों:


224

आप इसे इस तरह से कर सकते हैं:

Table::select('name','surname')->where('id', 1)->get();

1
मान लीजिए कि मैं हर क्षेत्र का चयन करना चाहता हूं, एक उम्मीद करता हूं कि मैं कैसे कर सकता हूं
प्रिंस अरोड़ा

1
सबसे पहले, जब आपके पास सवाल है, तो एक से पूछें। और आपके मामले के लिए - जिसको आप शामिल नहीं करना चाहते हैं उसके बजाय सभी कॉलमों का उल्लेख करें। इट्स दैट ईजी।
Marcin Nabiałek

2
सभी स्तंभों का उल्लेख किए बिना ऐसा करने के लिए कोई अन्य तरीका नहीं है
प्रिंस अरोड़ा

1
यह एक एकल तालिका के साथ मूल मामले के लिए काम करता है। हालाँकि, यदि आप पिवट टेबल पर किसी रिलेशन का उपयोग कर रहे हैं, तो यह एएलएसओ भी पिवट कॉलम का चयन करेगा।
बेनुबर्ड

1
@OPV यह सिर्फ SELECT name, surname FROM Table where id = 1
Marcin Nabiałek

67
Table::where('id', 1)->get(['name','surname']);

मैं एक ही चीज चाहता हूं, लेकिन अलग तरीके का इस्तेमाल कर रहा हूं। मैं मॉडल का उदाहरण बनाकर विधि का चयन करना चाहता हूं और फिर कॉलम चुनें। यानी $ मॉडल = नया MyModel (); $ मॉडल-> चयन (['col1', 'col2']); लेकिन यह बात काम नहीं कर रही है
धीरेंद्र

49

सभी () विधि का उपयोग करके हम तालिका से विशेष कॉलम का चयन कर सकते हैं जैसे नीचे दिखाया गया है।

ModelName::all('column1', 'column2', 'column3');

नोट : लारवेल 5.4


मैं एक ही चीज चाहता हूं, लेकिन अलग तरीके का इस्तेमाल कर रहा हूं। मैं मॉडल का उदाहरण बनाकर विधि का चयन करना चाहता हूं और फिर कॉलम चुनें। यानी $ मॉडल = नया MyModel (); $ मॉडल-> चयन (['col1', 'col2']); लेकिन यह बात काम नहीं कर रही है।
धीरेंदर

37

आप find()इस तरह का भी उपयोग कर सकते हैं :

ModelName::find($id, ['name', 'surname']);

$idचर एक सरणी मामले में आप मॉडल के कई उदाहरण पुनः प्राप्त करने की जरूरत है हो सकता है।


24

इसके अलावा Model::all(['id'])->toArray()यह केवल सरणी के रूप में आईडी लाएगा।


17

आपको पहले एक मॉडल बनाने की आवश्यकता है, जो उस तालिका का प्रतिनिधित्व करता है और फिर केवल 2 क्षेत्रों के डेटा को लाने के लिए नीचे दिए गए तरीके का उपयोग करता है।

Model::where('id', 1)
         ->pluck('name', 'surname')
         ->all();

यह सबसे अच्छा जवाब है क्योंकि यह कई रिश्तों में धुरी तालिकाओं के साथ भी काम करता है।
लुसियानो फंटुज़िन

8

आप प्राप्त कर सकते हैं () के साथ ही सभी ()

ModelName::where('a', 1)->get(['column1','column2']);

4

इसके अलावा आप प्लक का उपयोग कर सकते हैं।

Model::where('id',1)->pluck('column1', 'column2');

6
ध्यान दें कि pluck()चर्चा की गई अन्य विधियों की तुलना में कम कुशल है क्योंकि यह SELECT ...क्वेरी को संशोधित नहीं करता है , बल्कि यह पहले से ही लौटे परिणाम सेट पर संचालित होता है।
बेन जॉनसन

4

एक कॉलम का मूल्य प्राप्त करें:

Table_Name::find($id)->column_name;

यहां तक ​​कि आप इस पद्धति का उपयोग जहां क्लॉज के साथ कर सकते हैं:

Table_Name::where('id',$id)->first()->column_name;

क्वेरी बिल्डर में:

DB::table('table_names')->find($id)->column_name;

जहां क्लूज़ के साथ:

DB::table('table_names')->where('id',$id)->first()->column_name;

या

DB::table('table_names')->where('id',$id)->first('column_name');

अंतिम विधि परिणाम सरणी है


3

आप उपयोग कर सकते हैं Table::select ('name', 'surname')->where ('id', 1)->get ()

ध्यान रखें कि केवल कुछ क्षेत्रों के लिए चयन करते समय, आपको एक और प्रश्न करना होगा यदि आप बाद में अनुरोध में उन अन्य क्षेत्रों तक पहुंच प्राप्त करते हैं (जो स्पष्ट हो सकता है, बस उस चेतावनी को शामिल करना चाहता था)। आईडी फ़ील्ड को शामिल करना आमतौर पर एक अच्छा विचार है, इसलिए लार्वा जानता है कि आप किसी भी अपडेट को वापस कैसे लिख सकते हैं जो आप मॉडल उदाहरण के लिए करते हैं।


3

लार्वा 5.3 से केवल get()विधि का उपयोग करके आप अपनी तालिका के विशिष्ट कॉलम प्राप्त कर सकते हैं:

YouModelName::get(['id', 'name']);

या लार्वा 5.4 से आप all()अपनी पसंद के क्षेत्र प्राप्त करने के लिए विधि का उपयोग कर सकते हैं :

YourModelName::all('id', 'name');

उपरोक्त विधि get()या all()आप दोनों का उपयोग कर सकते हैं, where()लेकिन दोनों के लिए वाक्यविन्यास अलग है:

मॉडल :: सभी ()

YourModelName::all('id', 'name')->where('id',1);

मॉडल :: get ()

YourModelName::where('id',1)->get(['id', 'name']);

3

तालिका से विशिष्ट कॉलम का परिणाम प्राप्त करने के लिए, हमें कॉलम का नाम निर्दिष्ट करना होगा।

निम्नलिखित कोड का उपयोग करें: -

   $result = DB::Table('table_name')->select('column1','column2')->where('id',1)->get();  

उदाहरण के लिए -

$result = DB::Table('Student')->select('subject','class')->where('id',1)->get();  

कृपया अपने उत्तर में कुछ स्पष्टीकरण जोड़ें जैसे कि अन्य लोग इससे सीख सकते हैं
निको हसे

2

जबकि सबसे आम दृष्टिकोण का उपयोग करना है Model::select, यह मॉडल कक्षाओं के भीतर एक्सेसर विधियों के साथ परिभाषित सभी विशेषताओं को प्रदान कर सकता है। इसलिए यदि आप अपने मॉडल में विशेषता को परिभाषित करते हैं:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Get the user's first name.
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

और फिर उपयोग करें: TableName::select('username')->where('id', 1)->get();

यह दोनों के साथ first_nameऔर संग्रह का उत्पादन करेगाusername , न कि केवल उपयोगकर्ता नाम से।

बेहतर उपयोग pluck(), एकल या वैकल्पिक रूप से संयोजन के साथ select- यदि आप विशिष्ट कॉलम चाहते हैं।

TableName::select('username')->where('id', 1)->pluck('username');

या

TableName::where('id', 1)->pluck('username'); // जो केवल usernameमानों से मिलकर संग्रह लौटाएगा

इसके अलावा, वैकल्पिक रूप से, ->toArray()संग्रह ऑब्जेक्ट को सरणी में बदलने के लिए उपयोग करें।


1

->get()बहुत से ->all()(और ->first()आदि ..) उन क्षेत्रों को ले सकते हैं जिन्हें आप मापदंडों के रूप में वापस लाना चाहते हैं;

->get/all(['column1','column2'])

संग्रह को वापस लाएगा लेकिन केवल column1और के साथcolumn2


1

आप भी इस्तेमाल किया जा सकता findOrFail()विधि यहाँ यह प्रयुक्त करने के लिए अच्छा

यदि अपवाद नहीं पकड़ा गया है, तो 404 HTTP प्रतिक्रिया स्वचालित रूप से उपयोगकर्ता को वापस भेज दी जाती है। इन विधियों का उपयोग करते समय ४०० त्रुटि नहीं देने पर ४०४ प्रतिक्रियाएँ देने के लिए स्पष्ट जाँच लिखना आवश्यक नहीं है।

ModelName::findOrFail($id, ['firstName', 'lastName']);

1

यदि आप एकल पंक्ति प्राप्त करना चाहते हैं और उस पंक्ति एकल स्तंभ से, विशिष्ट स्तंभ का मान प्राप्त करने के लिए एक पंक्ति कोड स्तंभ को find()निर्दिष्ट करने के साथ विधि का उपयोग करना है जिसे आप इसे प्राप्त करना चाहते हैं।

यहाँ नमूना कोड है:

ModelName::find($id_of_the_record, ['column_name'])->toArray()['column_name'];

0

आप नीचे दिए गए प्रश्न का उपयोग कर सकते हैं:

Table('table')->select('name','surname')->where('id',1)->get();

1
कृपया अपने उत्तर में कुछ स्पष्टीकरण जोड़ें जैसे कि अन्य लोग इससे सीख सकते हैं
निको हसे

0

App \ Table का उपयोग करें; ... तालिका :: जहां ('आईडी', 1) -> प्राप्त ('नाम', 'उपनाम');

यदि नहीं तो कहां

टेबल :: सभी ( 'नाम', 'उपनाम');

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.