phalcon phql найти запрос с элементом массива, где - PullRequest
0 голосов
/ 08 ноября 2018

Я использую поисковый запрос phalcon, и используя элемент массива в предложении where, но получаю ошибку

"'Ошибка сканирования до' 3]>: from_time: ... 'при разборе: SELECT ..."

У меня есть обходной путь, я не использую phalcon find, но хочу выяснить, как использовать элемент массива в предложении where, любая идея приветствуется. Спасибо, Тал

phalcon (версия 3.4.1)

PostgreSQL 9.6.6 для x86_64-pc-linux-gnu, скомпилированный gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-битный

use Phalcon\Mvc\Model;
class Products extends Model
{

    public function initialize()
    {
        $this->setSource("products");
    }

    public function findByIdAndTime($id, $from_time)
    {
        $result = Products::find(["id=:id: AND create_time[3] > :from_time:",
        ['id' => $Id,'from_time' => $from_time]]);
        return $result;
    }
}

пример использования:

try
{
    $products = new Products();
    $products->findByIdAndTime(1, 1541672000);
}
catch(Exception $e)
{
    var_dump($e->getMessage());
}

столбец таблицы postgre create_time имеет тип integer [] (в примере {1541600807,0,1541673916}), а значение $ from_time является предварительно вставленным now_time () из БД (в примере 1541672000)

вот как создать таблицу

CREATE TABLE public.products
(
    id int,
    create_time int[]
);

INSERT INTO products(create_time) VALUES ('{1541600807,0,1541673916}');

1 Ответ

0 голосов
/ 09 ноября 2018

Попробуйте это

public function findByIdAndTime($id, $from_time)
{
    $result = Products::find([
        'conditions' => 'id= :id: AND create_time[3] > :from_time:',
        'bind' => [
            'id' => $id,
            'from_time' => $from_time
        ]
    ]);

    return $result;  
}
...