Как мне сделать запрос (), если результат требует другого запроса ()? - PullRequest
1 голос
/ 11 мая 2019

В настоящее время я использую Laravel Excel для создания листа.Лист требует запрос, который возвращает коллекцию, и мне нужен результат этой коллекции, чтобы запросить whereBetween (), чтобы получить эту коллекцию для map ().

У меня есть возможность собрать все представления, но мне нужноуказать строго из модели пользователя, чтобы отношения работали должным образом и были ограничены тем, что назначено этому пользователю.

Текущий метод, который я использую в другой области кода, использует следующий метод:

$user_contracts = \Auth::user()->contracts()->get();
$submission_id = array();
foreach ($user_contracts as $contract) {
    $submissions = $contract->submissions()->get();
    foreach ($submissions as $submission) {
        $submission_id[] = $submission->id;
    }
}

$user_submissions = FormSubmission::whereIn('id', $submission_id)->get();

Это возвращает правильные результаты.

Эта функция query () - это то, что я считаю необходимым использовать для генерации функции map (), которая требуется Laravel Excel для создания листа.

    public function query()
    {
        $time_start = Carbon::now()->setTime(0, 0, 0);
        $time_end = Carbon::now()->setTime(24, 0, 0);
        return User::query()->find($this->user->id)->contracts()->submissions()->whereBetween('created_at', [$time_start, $time_end]);
    }

Результат ошибки: Property [submissions] does not exist on this collection instance.

1 Ответ

0 голосов
/ 11 мая 2019

Благодаря вложенному запросу Laravel Eloquent Я смог ответить на свой вопрос, вроде.

Это последний код, с которым я закончил.

    public function query()
    {
        $time_start = Carbon::now()->setTime(0, 0, 0);
        $time_end = Carbon::now()->setTime(24, 0, 0);
        $contracts = $this->user->contracts()->get()->pluck('id')->toArray();

        return FormSubmission::query()->whereHas('contracts', function($q) use ($contracts) {
            $q->whereIn('contract_id', $contracts);
        })->whereBetween('created_at', [$time_start, $time_end]);
    }

Я все еще открыт для более элегантных ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...