Используйте атрибут append в красноречивом состоянии - PullRequest
0 голосов
/ 01 сентября 2018

это моя ситуация с моим проектом Laravel:

  • У меня есть 3 модели: Путешествия, Активность и Расходы.
  • В одном путешествии много мероприятий и много расходов.
  • Атрибуты модели:
    • Проезд: идентификатор, название, описание, дата, местоположение
    • Активность: id, travel_id, title, desc, date, выигрыш
    • Расход: id, travel_id, title, desc, выигрыш
  • Модель Travel имеет атрибут добавления, называемый total_prize, который является суммой всех расходов и операций, которые она имеет.

Пока все хорошо. Моя проблема в том, что я пытаюсь применить фильтр 'available_amount <= total_prize' к списку путешествий. </p>

Как я могу использовать атрибут добавления 'total_prize' для получения всех поездок, меньших, чем сумма_прибыли?

  • amount_available - переменная почтового запроса.

Это метод доступа к атрибуту total_prize:

 public function getTotalPrizeAttribute()
    {
        return (float) $this->activities->sum('prize') + $this->expenses->sum('prize');
    }

Я хочу сделать что-то вроде этого:

Travel::where('total_prize', '<=', 'amount_available')->get();

1 Ответ

0 голосов
/ 01 сентября 2018

У вас есть два варианта:

  • Получите все путешествий и затем отфильтруйте их (не очень эффективно):
$travels = Travel::with('activities', 'expenses')->get()
    ->where('total_prize', '<=', $amount_available);
  • Восстановить getTotalPrizeAttribute() в запросе:
$travels = Travel::withCount([
        'activities' => function($query) {
            $query->select(DB::raw('sum(prize)'));
        },
        'expenses' => function($query) {
            $query->select(DB::raw('sum(prize)'));
        }
    ])
    ->having(DB::raw('activities_count + expenses_count'), '<=', $amount_available)
    ->get(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...