【问题标题】:string with wildcards using in select在选择中使用通配符的字符串
【发布时间】:2020-03-17 10:31:20
【问题描述】:

我在使用 zend-select 时遇到了一些语法问题,

我从搜索表单中获取字段和值,我正在使用这样的数组(这里的所有内容都来自我的模型):

由于数组参数(vorname 和 nachname(mandant 将是整数))是字符串类型,如果字段 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' 并且值可能是棕褐色,我会很感激一个看起来像这样的 where kondition:

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

也许,有更好的方法,出现问题是因为现在我想要通配符 ;-)

【问题讨论】:

    标签: zend-db zend-framework3


    【解决方案1】:

    使用select->where() Zend 时可以发送的数组只会将其转换为带有 equalto 的 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%");
    

    【讨论】:

    • 我是这样做的:$kritln = '%'.$val.'%'; $select->where(['langname LIKE ?' =>$kritln]);这可行,但您的解决方案要好得多。
    猜你喜欢
    • 2020-03-02
    • 1970-01-01
    • 2012-03-22
    • 2013-07-12
    • 2015-02-28
    • 1970-01-01
    • 2015-07-29
    • 2019-01-02
    • 2021-08-31
    相关资源
    最近更新 更多