Выберите, где значение HSTORE равно $ value Laravel

Использование построителя запросов для выбора строк, в которых присутствует значение типа $ HSTORE.

Мое заявление Где:

->where("meta_data_fields->'$type'", 'like', '%'.$query.'%')

Не уверен, что я делаю не так. Я получаю эту ошибку:

Undefined column: 7 ERROR: column "meta_data_fields->'Entity::hstore'" does      not exist

Есть идеи?

0

Решение

чтобы получить все записи в таблице, которые имеют HSTORE

Model::where("meta_data_fields", 'like', '%'.$query.'%')->get();

Это должно делать нормально. В вашем случае данные в meta_data_fields — это строка json. если поиск выполняется по всем строкам таблицы, выберут все. Итак, вот что я сделал,
Я создал queryScope в модели
1 — получить все данные
2 — извлечь поле meta_data_ и расшифровать его
3 — цикл по полю meta_data_field
4 — выбрать только те, которые соответствуют критериям и построить массив

вот стол

+----+-------------+------------------------------------+-----------+
| id | name        | desc                               | vendor_id |
+----+-------------+------------------------------------+-----------+
|  1 | apples      | {"type":"fruit","origin":"mexico"} |         1 |
|  2 | oranges     | {"type":"fruit","origin":"peru"}   |         1 |
|  3 | Peaches     | {"type":"fruit","origin":"mexico"} |         2 |
|  4 | Cherries    | {"type":"fruit","origin":"us"}     |         1 |
|  5 | banans      | {"type":"fruit","origin":"brazil"} |      NULL |
|  6 | Water Melon | {"type":"fruit","origin":"mexico"} |         1 |
+----+-------------+------------------------------------+-----------+

public function scopeItems($name ="mexico"){
$items = array();
$data =  Self::get();
$meta_fields = json_decode($data -> pluck('desc') ,true);
foreach ($meta_fields as $key => $value) {
if (isset($value['origin']) && $value['origin'] == $name ){
$items[$key] = $data[$key] -> toArray();
}
}
return $items;
}
// output
Array
(
[0] => Array
(
[id] => 1
[name] => apples
[desc] => Array
(
[type] => fruit
[origin] => mexico
)

[vendor_id] => 1
)

[2] => Array
(
[id] => 3
[name] => Peaches
[desc] => Array
(
[type] => fruit
[origin] => mexico
)

[vendor_id] => 2
)

[5] => Array
(
[id] => 6
[name] => Water Melon
[desc] => Array
(
[type] => fruit
[origin] => mexico
)

[vendor_id] => 1
)

)

Надеюсь, на этот раз это сработает.

0

Другие решения

Вот что сработало в моей ситуации с Laravel.

$result = \DB::select(\DB::raw("SELECT hstore_fields, id from table where lower(hstore_fields->'$type') like lower('%$query%')"));
0

По вопросам рекламы [email protected]