Как использовать postgresql "@>" в запросе в laravel - PullRequest
0 голосов
/ 15 сентября 2018

запрос:

$msg = XYZ::where(function ($q) use ($chat) {
                    $q->where('msg->x', $chat['xId'])->where('msg->y', $chat['yId']);
                })->orWhere(function ($q) use ($chat) {
                    $q->where('msg->x', $chat['yId'])->where('msg->y', $chat['xId']);
                })->orderBy('msg->sTime')->first();

Индекс:

CREATE INDEX msg ON XYZ USING GIN ("msg" jsonb_path_ops);
CREATE INDEX msg_x ON XYZ USING gin (("msg" -> 'x'));
CREATE INDEX msg_y ON XYZ USING gin (("msg" -> 'y'));
CREATE INDEX msg_stime ON XYZ USING gin (("msg" -> 'sTime'));

Я создал индекс для поля jsonb "msg", и я пытаюсь использовать нотацию @> в запросе в laravel. рассматриваемый запрос работает отлично, но я просто хочу сократить время выполнения, создав индекс.

1 Ответ

0 голосов
/ 15 сентября 2018

Вы можете перейти к следующему подходу, например

$users = User::whereRaw("jsonb_exists(json -> 'skills', 'drink beer')")->get();

Поскольку @> просто проверяет , если json содержит , это будет иметь аналогичный эффект.

Есть эта ссылка https://laravel.com/api/5.6/Illuminate/Database/Query/Builder.html#method_whereJsonContains, и с этим это возможно

User::WhereJsonContains('json->skills', 'drink beer')->get();

Но я еще не пробовал.

Надеюсь, это поможет вам.

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