Как я могу работать с JSONB (postgresql) в Zend Framework 3?
например, я хочу сделать запрос, как это
SELECT id, data->'title' AS title, data->'description' as description FROM tablename
SELECT jsonb_array_elements_text(data->'tags') as tag FROM tablename WHERE id = 1;
Или ВЫПОЛНИТЬ функцию как
SELECT myFunction()jsonb_each(jsonb)INSERT INTO tablename VALUES (1,'{"title": "title 1","category":"category 2"}')UPDATE tablename SET data = jsonb_set(data,'{"image","quality"}','{" copyright":"company X","registered":true}') where id=2;
И Т.П.
У меня есть модель и только получить значение идентификатора
<?php
namespace EntityModel\Model;
class Entity
{
public $idEntity;
public $title;
public $description;
public $access;
public $category;
public $isVisible;
public $urlProyect;
public $urlDownload;
public $pedagogicUse;
public $PublicatorUser;
/**
* [exchangeArray description]
* @param array $data [description]
* @return [type] [description]
*/
public function exchangeArray(array $data)
{
$this->id = !empty($data['id']) ? $data['id'] : null;
$this->title = !empty($data['title']) ? $data['title'] : null;
$this->description = !empty($data['description']) ? $data['description'] : null;
$this->access = !empty($data['access']) ? $data['access'] : null;
$this->category = !empty($data['category']) ? $data['category'] : null;
$this->isVisible = !empty($data['isvisible']) ? $data['isvisible'] : null;
$this->urlProyect = !empty($data['urlproyect']) ? $data['urlproyect'] : null;
$this->urlDownload = !empty($data['urldownload']) ? $data['urldownload'] : null;
$this->PedagogicUse = !empty($data['pedagogicUse']) ? $data['pedagogicUse'] : null;
$this->publicatorUser = !empty($data['publicatoruser']) ? $data['publicatoruser'] : null;
}
}
Я хочу вернуть объект jsonb в методе exchangeArray, например, id => 4, title => «title»
Как я могу реализовать эти идеи, я следую учебному пособию из ZF3, и я не знаю, как реализовать, возможно, здесь не место для этого вопроса, но я ценю, если вы дадите мне обратную связь, я не хочу использовать ORM для этого проекта. Спасибо
Это файл модели, который мы можем сделать запрос с помощью этих методов
class EntityTable
{
protected $tableGateway;
protected $dbAdapter;
public function __construct(TableGatewayInterface $tableGateway)
{
$this->tableGateway = $tableGateway;
$this->dbAdapter = $tableGateway->adapter;
}
public function getAllFromQuery()
{
$query = $this->dbAdapter->query("SELECT count(*) FROM tablename WHERE data ? 'isVisible';", Adapter::QUERY_MODE_EXECUTE);
$data = $query->toArray();
return $data;
}
это важно, чем вы заявили в своем адаптере БД
'db' => [
'driver' => 'Pgsql', // pdo not support all the pg_ functions
'database' => 'database',
'username' => 'user',
'password' => 'pass'
]
В призыве к действию
public function indexAction()
{
return new ViewModel([
'data' =>$this->table->getAllFromQuery()
]);
}
и вид
<?= var_dump($this->data) ?>
И РЕЗУЛЬТАТ ЭТО ТАК
array(1) { [0]=> array(1) { ["count"]=> string(1) "6" } }
Ну, это хочу взять из базы данных, но как я могу передать массив данных в метод exchangeArray объекта?
я понял !!
public function getAllFromQuery()
{
$query = $this->dbAdapter->createStatement("SELECT id,
data->>'title' as title,
data->>'acess' as access,
data->>'category' as category
FROM tablename");
$data= $query->execute();
/* OR if you want execute a function from postgres */
//$query = $this->dbAdapter->query("SELECT totalregistrosdinamico('tablename')", Adapter::QUERY_MODE_EXECUTE);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->initialize($data);
$resultSetPrototype->setArrayObjectPrototype(new Model\EntityName());
return $resultSetPrototype;
}
Задача ещё не решена.
Других решений пока нет …