إنشاء استعلام باستخدام جملة شرطية في نموذج بليغ
سؤال
أحتاج إلى إنشاء استعلام باستخدام نموذج بليغ يتضمن عبارة الشرط حيث.لقد أنشأت شيئًا من خلال البحث في 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()
]);
}