问题描述
嗨,我用Laminas Sql类创建了一个SQL查询。
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('users');
$select->columns([
'user_id',]);
$nest = $select->where('account_type_id','dr')
->where->nest()
->nest();
$nest
->like('firstname','%john%')
->or->like('firstname','%james%')
->or->like('firstname','%brown%')
->unnest() // bracket closed
->or
->nest()
->like('lastname','%john%')
->or->like('lastname','%james%')
->or->like('lastname','%brown%')
->unnest()
->unnest();
echo $select->getSqlString($this->adapter->getPlatform());
上面的查询输出如下。
SELECT `users`.`user_id` AS `user_id` FROM `users` WHERE account_type_id AND
(
(`firstname` LIKE '%john%' OR `firstname` LIKE '%james%' OR `firstname` LIKE '%brown%') OR (`lastname` LIKE '%john%' OR `lastname` LIKE '%james%' OR `lastname` LIKE '%brown%')
)
但是我想用foreach循环创建它。我喜欢尝试,
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('users');
$select->columns([
'user_id',]);
$nest = $select->where('account_type_id','dr')
->where->nest()
->nest();
$names = ['%john%','%james%','%brown%'];
foreach ($names as $val) {
$nest = $nest
->or->like('firstname',$val)
->unnest()
->or
->nest()
->or->like('lastname',$val);
}
$nest = $nest->unnest();
echo $select->getSqlString($this->adapter->getPlatform());
但是输出不符合我的预期。
SELECT `users`.`user_id` AS `user_id` FROM `users` WHERE account_type_id AND (
(`firstname` LIKE '%john%')
OR (`lastname` LIKE '%john%' OR `firstname` LIKE '%james%')
OR (`lastname` LIKE '%james%' OR `firstname` LIKE '%brown%') OR (`lastname` LIKE '%brown%')
)
我非常感谢您能提供的任何帮助。 谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)