выбрать данные на основе массива - PullRequest
0 голосов
/ 16 января 2019

У меня есть массив из запроса, как показано ниже:

array:84 [
      0 => array:2 [
        "comp" => "50007148"
        "cus" => "F0401"
      ]
      1 => array:2 [
        "comp" => "50007148"
        "cus" => "J0050"
      ]
      2 => array:2 [
        "comp" => "50007148"
        "cus" => "L"
      ]
      3 => array:2 [
        "comp" => "50007148"
        "cus" => "LT"
      ]
      4 => array:2 [
        "comp" => "50007148"
        "cus" => "RP"
      ]

Теперь мне нужно написать запрос, где comp, cus в запросе выше.

$rslt = Stdetl::whereIn('comp, cus', $categories)
                           ->where(YEAR(docdate), '=', 2019)
                           ->get(SUM(number))->toArray();

Но этот запрос не работает. Я получаю сообщение об ошибке следующим образом:

(1/1) FatalErrorException
Call to undefined function App\Http\Controllers\YEAR()

Но это не единственная ошибка в этом запросе.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы не можете использовать в таком случае, используйте этот способ

$rslt=Stdetl::whereIn('comp', $categories)
             ->whereIn('cus', $categories)
             ->where(date('Y', strtotime(docdate)), '=', 2019)
              ->get(SUM(number))->toArray();;
0 голосов
/ 16 января 2019

YEAR() - это функция mysql , вы должны использовать whereRaw() для запроса этого. Как это:

->whereRaw('YEAR(docdate) = 2019')

Обновление:

Для вашей части whereIn() вы должны сделать два запроса, по одному для каждого столбца. Таким образом, вам нужно будет получить правильные значения из массива. Это можно сделать с помощью array_map.

Например:

->whereIn('comp', array_map(function($cat) { return $cat['comp']; }, $categories))
->whereIn('cus', array_map(function($cat) { return $cat['cus']; }, $categories))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...