Laravel - получить только те отношения, которые существуют и соответствуют условиям - PullRequest
0 голосов
/ 17 января 2020

В Laravel Я хочу получить всех клиентов, которые имеют отношения и где отношения соответствуют некоторым заданным параметрам. В настоящий момент режет возвращенные клиенты, которые соответствуют критериям отношений, а также клиенты с пустыми отношениями. Любая идея, как я могу получить только клиентов, которые соответствуют критериям отношений? Спасибо

$constraint = function($query){
    $query->where('type', 'Sales')->where('fdate', '!=', '0000-00-00')->where('archive', 'n')->orderBy('fdate', 'asc')->limit(1);
};
$brands = Client::select('ccid')->whereHas('history', $constraint)->with(['history' => $constraint])->limit(10)->get();

return $brands;

Вот фрагмент полученных результатов. Клиент с пустым history возвращать не должен.

{
    "ccid": 31753,
    "history": []
},    
{
    "ccid": 32061,
    "history": [
        {
        "hid": 415471,
        "ccid": 32061,
        "uid": 18097,
        "hdate": "2019-09-19",
        "fdate": "2020-01-14",
        "type": "Sales",
        "archive": "n",
        }
    ]
},
{
    "ccid": 32194,
    "history": []
},

1 Ответ

0 голосов
/ 17 января 2020

Измените ваш код на этот

$brands = Client::select('ccid')->whereHas('history', function($query) {
            $query->where('type', 'Sales')->where('fdate', '!=', '0000-00-00')->where('archive', 'n')->orderBy('fdate', 'asc')->limit(1);
        })->with('history)->limit(10)->get();

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

...