Создайте запрос с условным предложением, где в красноречивой модели

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