إنشاء استعلام باستخدام جملة شرطية في نموذج بليغ

StackOverflow https://stackoverflow.com//questions/24008715

سؤال

أحتاج إلى إنشاء استعلام باستخدام نموذج بليغ يتضمن عبارة الشرط حيث.لقد أنشأت شيئًا من خلال البحث في Google.ولكن لا يبدو أنه يعمل.

if ($status) {
    $this->where('status', $status);
}
if ($assignedto) {
    $this->where('assigned_to', $assignedto);
}
if ($fromDate != null && $toDate != null) {
    $this->whereBetween('date', array($fromDate, $toDate));
}
$quotes = $this->orderBy('date', 'desc')->paginate(40);

يقوم هذا الخيار بإرجاع جميع النتائج دون تصفية الحالة المعينة والتواريخ.

هل كانت مفيدة؟

المحلول

لقد قمت للتو بتحديثه عن طريق التعيين $this إلى متغير جديد لأنه عندما قمت بتعيين الاستعلام لـ $this, ، أظهر خطأ، $this لا يمكن الكتابة فوقها.

$quoteModel = $this;
if ($status) {
    $quoteModel = $quoteModel->where('status', $status);
}
if ($assignedto) {
    $quoteModel = $quoteModel->where('assigned_to', $assignedto);
}
if ($fromDate != null && $toDate != null) {
    $quoteModel = $quoteModel->whereBetween('date', array($fromDate, $toDate));
}
$quotes = $quoteModel->orderBy('date', 'desc')->paginate(40);

الذي يعمل بشكل مثالي الآن.ولكن إذا كان لدى شخص ما خيار أفضل، يرجى اقتراحه.شكرًا.

نصائح أخرى

أضفت نطاقًا إلى النموذج الخاص بي واستدعيته من وحدة التحكم.بهذه الطريقة تتم عملية التصفية الفعلية في النموذج، وتقوم وحدة التحكم فقط بتشغيل الاستعلام من خلال نطاق التصفية.

نموذج:

أحصل على معلمات URL مع Input::get, ، ولكن يمكنك أيضًا تمريرها كمعلمات إدخال إلى الوظيفة.

public function scopeFilter($query)
{
    $published = Input::get('published');
    if (isset($published)) $query->where('published', '=', $published);

    return $query;
}

مراقب:

هنا يتم تشغيل الاستعلام من خلال filter() قبل إعادته إلى العرض.

public function index()
{
    return View::make('articles.index', [
        'articles' => Article::with('writer')->filter()->get()
    ]);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top