строка с подстановочными знаками, использующими в select - PullRequest
0 голосов
/ 17 марта 2020

У меня есть некоторые проблемы с синтаксисом при использовании zend-select,

Я получаю поля и значения из формы поиска, я использую массив, который выглядит, например, вот так (все здесь не из моей модели ):

shot

Из-за того, что параметры массива (vorname и nachname (mandant будут целыми числами)) являются типом string, я хочу используйте подстановочные знаки в моем выборе, если поля vorname или / и nachname заполнены пользователем.

Я попробовал этот, чтобы научиться правильно его писать, что работает:

$select->where(['nachname LIKE ?'=>'%idt%']); 
$select->where(['vorname LIKE ?'=>'%tan%']); 

Чтобы получить правильную строку для использования в моем выборе, я использую это довольно неудобно, и, помимо появления ошибки, код:

foreach ($suche as $key=>$val) {
    if (($key=="vorname") && (strlen($suche['vorname'])>0)){
        $kritvn = "['" . $key . " LIKE " . chr(63) . " => '%" . $val . "%']";
    }
    if (($key=='nachname') && (strlen($suche['nachname'])>0)){
        $kritnn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";
    }
}

В первом я немного поиграл с синтаксисом для " ? ", если я использую следующий, я получаю следующую ошибку;

$kritvn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";

для правильного синтаксиса, чтобы использовать рядом с '[' vorname LIKE '=>' %% tan %% ' ])

Я пробовал с помощью функции chr (), а раньше с \?, Такая же проблема будет с "%".

Итак, в конце концов, у меня действительно два вопроса:

Каким будет правильный метод для достижения результата?

Если нет лучшее решение, о чем я не думаю, так как мне написать это правильно?

, если $ key = 'vorname' и значение возможно tan, я был бы признателен за условие where, которое выглядит так:

 $select->where(['vorname LIKE ?'=>'%tan%']); 

И, возможно, есть лучший способ, проблема возникла, потому что теперь я хотел подстановочные знаки; -)

1 Ответ

2 голосов
/ 26 марта 2020

Массив, который вы можете отправить при использовании select->where() Zend просто преобразует его в оператор where с равными

, например

$select->where(['vorname LIKE ?'=>'%tan%']); 

становится

WHERE `vorname LIKE ?` = "%tan%"

чтобы использовать его так, как вы должны использовать методы объектов where, подобные этому

$where = new \Zend\Db\Sql\Where();
$where->like("vorname", "%tan%");
$select->where($where);

, или вы можете использовать версию сортировщика, подобную этой, где Zend создает объект where для вас.

 $select->where->like("vorname", "%tan%");
...