2015-07-08 5 views
3

Можно ли «добавить» запросы в Laravel?Laravel Eloquent: Добавить запросы

Например, как так в этом примере кода:

function crunchNumbersForToday() 
{ 
    return $this->crunchSomeInformationInRange(Payments::where('created_at', Carbon::now())); 
} 

function crunchNumbersInRange($range) 
{ 
    $paymentsToCrunch = Payment::where('state', 'payed')->append($range)->get(); 

    // Work with the payments 
} 

Таким образом, в этом случае where из created_at поля будет добавляться в запрос, где state равно payed. Что бы сделать что-то вроде: where created_at = '2015-07-08 12:00' AND state = payed.

ответ

2

Я думаю, вы могли бы создать scope.

Для вашего кода, который будет (в вашей Payment модели):

function scopeToday($query) 
{ 
    return $query->where('created_at', Carbon::now()); 
} 

function scopeNumbersInRange($query) 
{ 
    return $query->where('state', 'payed'); 

    // Work with the payments 
} 

, а затем вызвать его в другом месте в коде, как:

Payment::numbersInRange()->today()->get(); 

Edit: Вы можете сделать их динамичными слишком :

function scopeDate($query, $date) 
{ 
    return $query->where('created_at', $date); 
} 

...

Payment::numersInRange()->date(Carbon::now())->get(); 

И так далее. Таким образом, вы можете сохранить области цепочки.

+0

Не совсем как «прохождение деталей запроса вокруг». Но это подходит для моей проблемы. – Matthijn

+1

Таким образом, вы (необязательно) добавляете детали запроса в QueryBuilder. Вы можете объединить столько, сколько хотите, и построить запрос таким образом, вы также можете сделать их динамичными. Рядом с $ query вы можете передать еще несколько переменных, которые вы можете использовать в своем запросе. (то есть это -> где() или что-то еще) –

+0

Теперь я мог сделать что-то вроде этого: function doSomething ($ scopeName) {Payment :: $ scopeName ('param') -> get(); } Итак, он приближается. – Matthijn

Смежные вопросы