লারাভেল 4 এ একাধিক কলামের জন্য অর্ডার কীভাবে ব্যবহার করবেন?


230

আমি orderBy()লারাভেল এলোউটারে পদ্ধতিটি ব্যবহার করে লারাভেল 4 এ একাধিক কলামগুলি বাছাই করতে চাই । ক্যোয়ারীটি এলোভয়েটের মতো ব্যবহার করে তৈরি করা হবে:

SELECT *
FROM mytable
ORDER BY
  coloumn1 DESC, coloumn2 ASC

কিভাবে আমি এটি করতে পারব?


খুব সহজ. User::orderBy('name', 'DESC') ->orderBy('email', 'ASC') ->get();
— আমি

উত্তর:


372

orderBy()আপনার প্রয়োজন হিসাবে কেবল যতবার প্রার্থনা করুন । এই ক্ষেত্রে:

User::orderBy('name', 'DESC')
    ->orderBy('email', 'ASC')
    ->get();

নিম্নলিখিত কোয়েরি উত্পাদন করে:

SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC

16
ভালো লাগবে যদি আমরা এর মতো একটি অ্যারে পাস করতে পারি: User::orderBy(array('name'=>'desc', 'email'=>'asc'))
— জোশুয়া ডেভিড

10
@ ফায়ারকোডিং, আপনি এটি করতে পারেন$user->orders = array(array('column' => 'name', 'direction' => 'desc'), array('column' => 'email', 'direction' => 'asc'));
— rmobis

কোনও প্রতিষ্ঠিত ক্যোয়ারিতে অর্ডারবাই যুক্ত করার কোনও উপায় আছে কি?
— রাফায়েল

@ রাফায়েল, আপনি যদি ইতিমধ্যে এটি চালিত না করেন (ডাকা getবা first), কেবল orderByএটির জন্য কল করুন। অন্যথায়, না।
— rmobis

অন্যথায়, আপনার যদি সর্বদা ডেস্কের মাধ্যমে অর্ডার করতে হয় তবে আপনি সর্বশেষ ()ও ব্যবহার করতে পারেন।
— ssi-anik

30

@Rmobis তার উত্তরে যেমনটি নির্দিষ্ট করেছে, আপনি তা করতে পারেন [[এতে আরও কিছু যুক্ত করা]

order byদুবার ব্যবহার :

MyTable::orderBy('coloumn1', 'DESC')
    ->orderBy('coloumn2', 'ASC')
    ->get();

এবং এটি করার দ্বিতীয় উপায় হ'ল

ব্যবহার raw order by:

MyTable::orderByRaw("coloumn1 DESC, coloumn2 ASC");
    ->get();

উভয়ই অনুসরণ হিসাবে একই কোয়েরি তৈরি করবে,

SELECT * FROM `my_tables` ORDER BY `coloumn1` DESC, `coloumn2` ASC

@ রমোবিস যেমন প্রথম উত্তরের মন্তব্যে নির্দিষ্ট করা হয়েছে আপনি এর মতো কলাম দ্বারা অর্ডার দেওয়ার জন্য কোনও অ্যারের মতো পাস করতে পারেন ,

$myTable->orders = array(
    array('column' => 'coloumn1', 'direction' => 'desc'), 
    array('column' => 'coloumn2', 'direction' => 'asc')
);

এটি করার আরও একটি উপায় iterateলুপে রয়েছে,

$query = DB::table('my_tables');

foreach ($request->get('order_by_columns') as $column => $direction) {
    $query->orderBy($column, $direction);
}

$results = $query->get();

আশা করি এটা সাহায্য করবে :)


আমি কি অর্ডারবাই এবং অর্ডার একসাথে ব্যবহার করতে পারি? আমার পক্ষে কাজ করে না বলে মনে হয়, ফলাফলের অনুসন্ধানগুলি কেবল অর্ডারকে সম্মান করে বলে মনে করে BYRaw
— রিটার্ন-1

প্রথমে অর্ডারবাইয়ের চেষ্টা করুন এবং তারপরে অর্ডারবাইরউকে অর্ডার করুন এবং ফলাফলটি দেখুন জর্জ অ্যাভগৌস্টিস
— সাগর নলিয়াপাড়া

দুর্ভাগ্যক্রমে এটি করা যায় না কারণ এটি প্রথমে এলোমেলোভাবে তৈরি করা দরকার এবং তারপরে চূড়ান্ত যোগ্যতা অর্জনকারী দ্বারা আদেশ করুন।
— 1

1
এটি একসাথে কাজ করতে পারে কারণ প্রথম কলামে বাছাইয়ের জন্য আবেদন করা আপনি দ্বিতীয় কলামটি বাছাই করতে পারবেন না
— সাগর নলিয়াপাড়া

3

এখানে অন্য ডজ যা আমি আমার বেস সংগ্রহস্থল শ্রেণীর জন্য নিয়ে এসেছি যেখানে আমাকে একটি নির্বিচার সংখ্যক কলাম দ্বারা অর্ডার করতে হবে:

public function findAll(array $where = [], array $with = [], array $orderBy = [], int $limit = 10)
{
    $result = $this->model->with($with);
    $dataSet = $result->where($where)
        // Conditionally use $orderBy if not empty
        ->when(!empty($orderBy), function ($query) use ($orderBy) {
            // Break $orderBy into pairs
            $pairs = array_chunk($orderBy, 2);
            // Iterate over the pairs
            foreach ($pairs as $pair) {
                // Use the 'splat' to turn the pair into two arguments
                $query->orderBy(...$pair);
            }
        })
        ->paginate($limit)
        ->appends(Input::except('page'));

    return $dataSet;
}

এখন, আপনি নিজের কলটি এভাবে করতে পারেন:

$allUsers = $userRepository->findAll([], [], ['name', 'DESC', 'email', 'ASC'], 100);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.