Как использовать groupBy, гдеHas laravel - PullRequest
0 голосов
/ 09 января 2020

Я использую Metable в моем проекте для создания мета для заказов
, но у меня есть одна проблема
Я хочу, чтобы групповые заказы имели одинаковый адрес электронной почты
Это изображение таблицы metable: image 1 image 2

мне нужен код, подобный этому, может работать:)

Order::whereHas( 'meta', function($query) {
        $query->where("key" , "gmail");
})->groupBy('meta.value')->get();

, и это мета-отношение, которое вызывается чертой 'use Metable 'в заказе Модель:

public function meta(): MorphMany
{
    return $this->morphMany($this->getMetaClassName(), 'metable');
}

Спасибо

Ответы [ 3 ]

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

Это не проверено, но я бы попробовал получить модели из класса Order:

Order::whereHas('meta', function($query) {
    $query->where('key', 'gmail');
})->with(['meta' => function($query) {
    $query->groupBy('value')
}])->get();
0 голосов
/ 09 января 2020

Попробуйте это решение вместо:

Order::whereHas( 'meta', function($query) {
    $query->where("key" , "gmail")
    $query->groupBy('meta.value');
})->get();
0 голосов
/ 09 января 2020

Этот запрос может работать, мы начинаем запрашивать из мета-модели:

Meta::with('metable')
    ->whereHasMorph('metable', Order::class)
    ->where('key', 'gmail')
    ->get()
    ->groupBy('value')
    ->map(function ($metaCollection) {
        return $metaCollection->map->metable->unique('id');
    });
...