Как использовать Accessor как условие в Laravel? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть этот Accessor ниже, который возвращает один строковый результат (пример: «Готов» или «Текущий» ...):

    public function getMinimumStatusAttribute()
    {
        $statusIds = [];
        $tasks = $this->tasks()->get();
        foreach ($tasks as $task) {
            array_push($statusIds, $task->task_status_id);
        }

        return taskStatus::orderBy('order', 'asc')
            ->where('operational_status', '=', true)
            ->whereIn('id', $statusIds)->value('name');
    }

У меня TeamleaderDeal модель:

return TeamleaderDeal::all();

, который возвращает:


[
  {
    "id": 4,
    "teamleader_id": "8b03da5a-af1f-051d-ad6d-b6199c7f7c35",
    "created_at": "2019-09-09 11:41:46",
    "updated_at": "2019-09-14 20:57:03",
    "title": "Brand identity #2",
    "reference": "12",
    "lead_company_id": "adeddc13-6962-0a19-ac72-6713d1cf1455",
    "teamleader_company_id": 1,
    "dealphase_id": "199a34fc-de5c-038d-a655-c61fa4d97d17",
    "estimated_closing_date": null,
    "po_number": "az215487",
    "teamleader_deal_phase_id": 6,
    "dealPhase": "Refused",
    "tasksCount": 5,
    "companyLanguage": "nl",
    -------------------------
    "minimumStatus": "ready", ||||||accessor results
    -------------------------
    "invoiced": 1,
(...)

Я хотел бы отфильтровать TeamleaderDeal результаты по MinimumStatus, чтобы показать, например, только результаты, где MinimumStatus равно 'Готово'?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Вы можете использовать

public function getMinimumStatusAttribute($minimumStatus = NULL) {
   if($minimumStatus === 'Ready') {
        // do the magic here
        $statusIds = [];
        $tasks = $this->tasks()->get();
        foreach ($tasks as $task) {
            array_push($statusIds, $task->task_status_id);
        }

        return taskStatus::orderBy('order', 'asc')
            ->where('operational_status', '=', true)
            ->whereIn('id', $statusIds)->value('name');
   }
   // else return default value
   return $this->attributes['minimum_status'];

}

Редактировать

Что касается ваших обновлений, вы можете использовать reject поставщика метода Laravel Коллекция

Например,

$teamleaderDeals = TeamleaderDeal::all();

return $teamleaderDeals->reject(function ($teamleaderDeal) {
    return $teamleaderDeal->minimumStatus !== 'Ready';
});
0 голосов
/ 04 марта 2020

Я думаю, вам нужно это простое where предложение:

return taskStatus::orderBy('order', 'asc')
            ->where('operational_status', '=', true)
            ->where('name', 'Ready')
            ->whereIn('id', $statusIds)->value('name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...