মতবাদ সহ একাধিক কলাম দ্বারা অর্ডার


115

আমাকে দুটি কলাম দ্বারা ডেটা অর্ডার করতে হবে (যখন সারিগুলির 1 কলামের জন্য পৃথক মান রয়েছে, এটির মাধ্যমে ক্রম করুন; নাহলে, কলাম নম্বর 2 দ্বারা অর্ডার করুন)

আমি QueryBuilderক্যোয়ারী তৈরি করতে একটি ব্যবহার করছি ।

যদি আমি orderByদ্বিতীয়বার পদ্ধতিটিকে কল করি তবে এটি পূর্বনির্ধারিত যে কোনও ক্রমগুলির পরিবর্তে।

আমি প্রথম প্যারামিটার হিসাবে দুটি কলাম পাস করতে পারি:

->orderBy('r.firstColumn, r.secondColumn', 'DESC');

তবে আমি দ্বিতীয় প্যারামিটারের জন্য দুটি ক্রম নির্দেশকে পাস করতে পারি না, সুতরাং আমি যখন এই কোয়েরিটি সম্পাদন করি তখন প্রথম কলামটি একটি আরোহণের দিকে এবং দ্বিতীয়টি সাজানো হয়, অবতরণ করে। আমি তাদের উভয়ের জন্য অবতরণ ব্যবহার করতে চাই।

এটি ব্যবহার করে কি কোনও উপায় আছে QueryBuilder? আমার কি ডিকিউএল ব্যবহার করা দরকার?

উত্তর:


213

আপনাকে কলাম নামের ঠিক পরে অর্ডার দিক যুক্ত করতে হবে:

$qb->orderBy('column1 ASC, column2 DESC');

আপনি উল্লেখ করেছেন যে একাধিক কল orderBy স্ট্যাক না করে , তবে আপনি একাধিক কল করতে পারেন addOrderBy:

$qb->addOrderBy('column1', 'ASC')
   ->addOrderBy('column2', 'DESC');

2
ধন্যবাদ। আমি এর আগে খেয়াল করিনি। আমি ভেবেছিলাম দুটি অর্ডার দ্বারা বিবৃতি এই জন্য ঠিক আছে। সুতরাং আমি addOrderBy পদ্ধতিটি বুঝতে পারি নি। এটি

দিয়েগো আগুলি: দুর্ভাগ্যক্রমে আপনার উত্তরের দুটি লিঙ্কই আর কাজ করছে না।
k00ni

1
@ কে00নি এটি উল্লেখ করার জন্য ধন্যবাদ। আমি পূর্বেরটিকে সর্বশেষতম ডক্সে আপডেট করেছি, তবে আমি গিটহাব-এ স্থানান্তরিত সমস্যা DC-909 খুঁজে পাইনি, তাই আমি পরবর্তীটি সরিয়েছি।
দিয়েগো আগুলি

সারণী ওরফে সহ কোয়েরি বিল্ডারদের জন্য, যুক্ত করতে ভুলবেন না alias.column_name
মৌলিক পরমার

16

ডক্ট্রিন ২.x এ আপনি উপরোক্ত উদাহরণ হিসাবে 'অর্ডার বাই' বা 'অ্যাডঅর্ডারবি' ব্যবহার করে একাধিক অর্ডার পাস করতে পারবেন না। কারণ, আপনি দ্বিতীয় প্যারামিটারটি ফাঁকা ছেড়ে দেওয়ার পরে স্বয়ংক্রিয়ভাবে শেষ কলামের নামের শেষে 'এএসসি' যুক্ত করে যেমন 'অর্ডার বাই' ফাংশনে।

উদাহরণস্বরূপ ->orderBy('a.fist_name ASC, a.last_name ASC'), এসকিউএলকে এই জাতীয় 'অর্ডার বা ফার্স্টনাম এএসসি, লাস্ট-নাম এএসসি এএসসি' এর মতো কিছু আউটপুট দেওয়া হবে। সুতরাং এটি এসকিউএল সিনট্যাক্স ত্রুটি। কেবলমাত্র অর্ডারবাই বা অ্যাডঅর্ডারবিয়ের ডিফল্টরূপে 'ASC'।

এর দ্বারা একাধিক ক্রম যুক্ত করতে আপনাকে 'যুক্ত' ফাংশনটি ব্যবহার করতে হবে। এবং এটি এই মত হবে।

->add('orderBy','first_name ASC, last_name ASC')। এটি আপনাকে সঠিকভাবে ফর্ম্যাট করা এসকিউএল দেবে।

অ্যাড () ফাংশন সম্পর্কিত আরও তথ্য। https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#low-level-api

আশাকরি এটা সাহায্য করবে. চিয়ার্স!


8

তুমি ব্যবহার করতে পার ->addOrderBy($sort, $order)

যোগ করুন: মতবাদ কোয়েরি বিল্ডার বিটিডব্লিউ। প্রায়ই স্বাভাবিক পদ্ধতি "বিশেষ" পরিবর্তন ব্যবহার করে, দেখতে select-addSelect, where-andWhere-orWhere, groupBy-addgroupBy...


0

জন্য মন্তব্য orderByসোর্স কোড নোট: Keys are field and values are the order, being either ASC or DESC.। সুতরাং আপনি করতে পারেন orderBy->(['field' => Criteria::ASC])


এটি সঠিক নয়। উপরে আমার উত্তরটি দেখুন
থমাস হ্যানসেন

0

orderByপদ্ধতি পারেন দুটি স্ট্রিং অথবা একটি প্রয়োজন Expr\OrderByঅবজেক্ট। আপনি যদি একাধিক অর্ডার ঘোষণাগুলি যুক্ত করতে চান তবে সঠিক জিনিসটি হল addOrderByপদ্ধতিটি ব্যবহার করা , বা কোনও OrderByঅবজেক্ট ইনস্ট্যান্ট করে সেই অনুযায়ী সেট করুন:

   # Inside a Repository method:
   $myResults = $this->createQueryBuilder('a')
       ->addOrderBy('a.column1', 'ASC')
       ->addOrderBy('a.column2', 'ASC')
       ->addOrderBy('a.column3', 'DESC')
   ;

   # Or, using a OrderBy object:
   $orderBy = new OrderBy('a.column1', 'ASC');
   $orderBy->add('a.column2', 'ASC');
   $orderBy->add('a.column3', 'DESC');

   $myResults = $this->createQueryBuilder('a')
       ->orderBy($orderBy)
   ;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.