লারাভেল 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.