লারাভেল আদেশের মাধ্যমে


116

আমি একটি নির্দিষ্ট পোস্টের লেখক দ্বারা পোস্ট সমস্ত মন্তব্য লুপ করছি।

foreach($post->user->comments as $comment)
    {
        echo "<li>" . $comment->title . " (" . $comment->post->id . ")</li>";
    }

এই আমাকে দেয়

I love this post (3)
This is a comment (5)
This is the second Comment (3)

আমি কীভাবে পোস্ট_আইড দিয়ে অর্ডার করব যাতে উপরের তালিকাটি 3,3,5 হিসাবে অর্ডার করা হয়?

উত্তর:


247

ক্যোয়ারী ফাংশনগুলির সাথে সম্পর্কটি বাড়ানো সম্ভব:

<?php
public function comments()
{
    return $this->hasMany('Comment')->orderBy('column');
}

[মন্তব্যের পরে সম্পাদনা করুন]

<?php
class User
{
    public function comments()
    {
        return $this->hasMany('Comment');
    }
}

class Controller
{
    public function index()
    {
        $column = Input::get('orderBy', 'defaultColumn');
        $comments = User::find(1)->comments()->orderBy($column)->get();

        // use $comments in the template
    }
}

ডিফল্ট ব্যবহারকারী মডেল + সাধারণ নিয়ামক উদাহরণ; মন্তব্যের তালিকা পাওয়ার সময়, কেবল ইনপুট :: get () এর উপর ভিত্তি করে অর্ডারবাই () প্রয়োগ করুন। (কিছু ইনপুট-চেকিং করতে ভুলবেন না;))


2
ইতিমধ্যে কেউ লারাভেল ফোরামে এটির পরামর্শ দিয়েছেন, তবে আমি কন্ট্রোলারে এটি করতে সক্ষম হতে চাই যাতে ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে কোন ক্ষেত্রটি বাছাই করতে পারি। আমি হতে পারে প্রশ্নে এই পরিষ্কার করা উচিত।
প্রেস্টনডকস

আমি একটি দ্বিতীয় উদাহরণ যুক্ত করেছি
রব গর্ডিজন

1
থ্যাঙ্ক রব, আপনি আমাকে সঠিক ট্র্যাকের উপরে রেখেছিলেন। আসল উত্তরটি ছিল $ মন্তব্যসমূহ = ব্যবহারকারী :: সন্ধান করুন (10) -> মন্তব্য () -> অর্ডারবি ('পোস্ট_আইডি') -> পান (); কাজ করার জন্য এটি () পদ্ধতির প্রয়োজন বলে মনে হয়েছিল। আপনি যদি নিজের উত্তরে get () যোগ করতে পারেন তবে আমি এটিকে গৃহীত উত্তর হিসাবে চিহ্নিত করব।
প্রেস্টনডকস

2
এই ভাল কাজ করে যদি আপনি একটি একক রেকর্ড পুনরুদ্ধার করছি, কিন্তু আপনি যদি একাধিক রেকর্ড পুনরুদ্ধার করছি তোমাদের লাইন বরাবর আরো কিছু চাইবেন stackoverflow.com/a/26130907/1494454
dangel

যদি আপনি মাইএসকিএল কঠোর মোড ব্যবহার করেন, যা লারাভেল ৫.৪ এ ডিফল্ট রয়েছে, f.ex আপনি এসকিউএলস্টেট [42000] পাবেন: সিনট্যাক্স ত্রুটি বা অ্যাক্সেস লঙ্ঘন: 1140 গ্রুপ কলামের মিশ্রণ ...
সাবাইন

8

আমি বিশ্বাস করি আপনি এটি করতে পারেন:

$sortDirection = 'desc';

$user->with(['comments' => function ($query) use ($sortDirection) {
    $query->orderBy('column', $sortDirection);
}]);

এটি আপনাকে প্রতিটি সম্পর্কিত মন্তব্য রেকর্ডে স্বেচ্ছাচারী যুক্তি চালানোর অনুমতি দেয়। আপনি এখানে স্টাফ থাকতে পারে:

$query->where('timestamp', '<', $someTime)->orderBy('timestamp', $sortDirection);

1
নাঃ। আমি এটি চেষ্টা করেছি, এটি কাজ করে না। এখানে আমার কেস: আমার কাছে দুটি টেবিল ( appointmentsএবং schedules) রয়েছে, ক্যোয়ারীটি সহজ: appointmentsঅর্ডার পেয়ে যান schedulesdatetimeসাজানো। টেবিল appointmentsথেকে সঞ্চয় করতে সারণীতে নতুন কলাম যুক্ত করে আমার সমাধান datetimeরয়েছে schedules। এবং এখন আমি কেবল আদেশ দিয়েছি appointmentsdatetimeআমি জানি এটি সর্বোত্তম পদ্ধতি নয়, তবে এটি সমস্যার সমাধান করে। এক্সডি
ফেন্ডি সেটিওয়ান

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