Laravel Запрос выбора записи списка в поле JSON - PullRequest
0 голосов
/ 18 января 2020

Я храню данные Dynami c в поле MySQL JSON, используя Laravel v6.11.0, nova v2.9.3 и nova-Flexible-Content v0.1.13. Сохраненные данные выглядят примерно так:

[
  {
    "layout": "source",
    "key": "5ce8e0a877487fe5",
    "attributes": {
      "value": "342",
      "unit": "USD",
      "language": "en",
      "url": "http:\\/\\/google.com",
      "authority": "google.com",
      "entry_date": "2020-01-21",
      "date": "2019-12-21"
    }
  },
  {
    "layout": "source",
    "key": "a82393ce016e8c14",
    "attributes": {
      "value": "444",
      "unit": "USD",
      "language": "en",
      "entry_date": "2020-01-21",
      "url": "https:\\/\\/google.com",
      "authority": "TEST",
      "date": "2020-01-20"
    }
  }
]

Мне было интересно, возможно ли построить запрос Laravel для выбора второй записи на основе записи authority? Критерии:

  • url должно содержать google.com И
  • authority не должно быть google.com

Я нашел https://laravel.com/docs/5.8/queries#json -where-clauses , но я пытаюсь собрать правильный запрос. Может, кто-нибудь подскажет, как это сделать? Спасибо

1 Ответ

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

Вы можете обратиться к этому обсуждению на Laracast

$data = App\YourModel::whereRaw('JSON_CONTAINS(body->"$[*].attributes.url", "\"https://google.com\"")')
        ->orWhereRaw('JSON_CONTAINS(body->"$[*].id", "\"http://google.com\"")')
        ->whereRaw('not JSON_CONTAINS(body->"$[*].attributes.authority", "\"google.com\"")')
        ->get();

foreach ($data as $key => $row) {
    $bodyArr = json_decode($row->body);

    foreach ($bodyArr as $item) {

       if ((preg_match("/(http:\/\/www\.|https?:\/\/google.com)/i",$item->attributes->url)) && (strpos($item->attributes->authority, 'google.com') === false))  {
          dump($item);
          // YOUR CODE GOES HERE
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...