বর্ণালী স্পষ্টত কীভাবে নির্দিষ্ট কলামগুলি নির্বাচন করবেন


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
প্রথমত, যখন আপনার প্রশ্ন রয়েছে, একজনকে জিজ্ঞাসা করুন। এবং আপনার ক্ষেত্রে - আপনি অন্তর্ভুক্ত করতে চান না তার পরিবর্তে সমস্ত কলামগুলি উল্লেখ করুন। এটা এত সহজ।
মার্সিন নবিয়াłেক

2
সমস্ত কলামের উল্লেখ না করেই এটি করার জন্য অন্য কোনও পদ্ধতি নেই
প্রিন্স অরোরা

1
এটি একটি একক টেবিল সহ একটি বেসিক কেসের জন্য কাজ করে। তবে, আপনি যদি একটি পিভট টেবিলের উপর কোনও সম্পর্ক ব্যবহার করে থাকেন তবে এটি স্বয়ংক্রিয়ভাবে পিভট কলামগুলি নির্বাচন করবে select
বেনুবার্ড

1
@OPV এটি কেবল SELECT name, surname FROM Table where id = 1এসকিউএল কোয়েরি চালায়
মার্সিন নবিয়ায়েক

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

আমি একই জিনিস চাই তবে বিভিন্ন পদ্ধতি ব্যবহার করি। আমি মডেলের উদাহরণ তৈরি করে পদ্ধতিটি নির্বাচন করতে চাই এবং তারপরে কলামটি নির্বাচন করতে চাই। যেমন $ মডেল = নতুন মাইমোডেল (); $ মডেল-> নির্বাচন করুন (['কল 1', 'কল 2']); তবে এই জিনিসটি কাজ করছে না
ধীরেন্দ্র

49

সমস্ত () পদ্ধতি ব্যবহার করে আমরা নীচের চিত্রের মতো টেবিল থেকে নির্দিষ্ট কলামগুলি নির্বাচন করতে পারি।

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

দ্রষ্টব্য : লারাভেল 5.4


আমি একই জিনিস চাই তবে বিভিন্ন পদ্ধতি ব্যবহার করি। আমি মডেলের উদাহরণ তৈরি করে পদ্ধতিটি নির্বাচন করতে চাই এবং তারপরে কলামটি নির্বাচন করতে চাই। যেমন $ মডেল = নতুন মাইমোডেল (); $ মডেল-> নির্বাচন করুন (['কল 1', 'কল 2']); কিন্তু এই জিনিস কাজ করে না।
ধীরেন্দ্র

37

আপনি এটির find()মতো ব্যবহার করতে পারেন :

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

$idআপনি যদি মডেলের একাধিক উদাহরণ পুনরুদ্ধার করতে চান তবে চলকটি অ্যারে হতে পারে।


24

এছাড়াও Model::all(['id'])->toArray()এটি কেবল অ্যারে হিসাবে আইডি আনবে।


17

আপনাকে প্রথমে একটি মডেল তৈরি করতে হবে, যা সেই টেবিলটি উপস্থাপন করে এবং তারপরে কেবলমাত্র 2 টি ক্ষেত্রের ডেটা আনার জন্য নীচের স্বতন্ত্র উপায় ব্যবহার করুন।

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

এটি সবচেয়ে ভাল উত্তর যেহেতু এটি অনেকগুলি থেকে অনেক সম্পর্কে পিভট টেবিলগুলির সাথেও কাজ করে।
লুসিয়ানো ফ্যান্টুজি

8

আপনি get () পাশাপাশি সমস্ত () ব্যবহার করতে পারেন

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

4

এছাড়াও আপনি pluck ব্যবহার করতে পারেন।

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);

মডেল :: পেতে ()

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()সাথে আরও ভাল ব্যবহার , একক বা allyচ্ছিকভাবে selectএকত্রিত হন।

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

অথবা

TableName::where('id', 1)->pluck('username'); // এটি কেবলমাত্র সমন্বিত সংগ্রহকে ফিরিয়ে দেবে username মান

এছাড়াও, allyচ্ছিকভাবে, ->toArray()সংগ্রহ অবজেক্টকে অ্যারেতে রূপান্তর করতে ব্যবহার করুন ।


1

->get()অনেকগুলি ->all()(এবং ->first()ইত্যাদি ..) আপনি যে ক্ষেত্রগুলিকে প্যারামিটার হিসাবে ফিরিয়ে আনতে চান তা নিতে পারে;

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

সংগ্রহটি ফিরিয়ে আনবে তবে কেবল column1এবং সাথেcolumn2


1

আপনি findOrFail()এখানে পদ্ধতি ব্যবহার করতে পারেন এটি ব্যবহার করা ভাল

ব্যতিক্রমটি ধরা না পড়লে একটি 404 এইচটিটিপি প্রতিক্রিয়া স্বয়ংক্রিয়ভাবে ব্যবহারকারীর কাছে ফিরে পাঠানো হয়। 500 টি ত্রুটি না দিয়ে এই পদ্ধতিটি ব্যবহার করার সময় 404 টি প্রতিক্রিয়া ফিরিয়ে দেওয়ার জন্য সুস্পষ্ট চেক লেখার প্রয়োজন নেই ..

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

অ্যাপ্লিকেশন \ টেবিল ব্যবহার করুন; ... সারণী :: যেখানে ('আইডি', 1) -> ('নাম', 'উপাধি') পান;

যদি না হয়

ছক :: সব ( 'নাম', 'উপাধি');

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