PHP初学者在这里。寻找更有效的代码。
我有一个名为的模型,Brands
并且试图在视图中按字母顺序提取,排序和显示值。
例如:
品牌名称以字母A开头
品牌名称以字母K开头
我可以通过以下代码执行相同操作:
$ brandsTable = TableRegistry :: get('Brands');
$brandA = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'A%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'a%');
$brandK = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'K%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'k%');
$brandS = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'S%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 's%');
$brandT = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'T%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 't%');
$brandN = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'N%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'n%');
$brandH = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'H%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'h%');
$brandM = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'M%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'm%');
$brandY = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'Y%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'y%');
$brandR = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'R%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'r%');
$brandW = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'W%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', 'w%');
$this->set('brandsA', $brandA);
$this->set('brandsK', $brandK);
$this->set('brandsS', $brandS);
$this->set('brandsT', $brandT);
$this->set('brandsN', $brandN);
$this->set('brandsH', $brandH);
$this->set('brandsM', $brandM);
$this->set('brandsY', $brandY);
$this->set('brandsR', $brandR);
$this->set('brandsW', $brandW);
我相信这不是多次调用模型/执行查询的最有效方法。试图寻找有效的解决方案(哈希:提取/排序等),但无法获得正确的输出。感谢您的帮助。谢谢!
注意:Deleted标志用于逻辑删除。
更新: ThinTank和ndm发表评论后抱歉没有提及,因为这是一个日本网站,我正在寻找区分大小写的品牌名称
[A,E,I,O,U],[K],[S],[T],[N],[H],[M],[Y],[R],[W]
例子:我有以下品牌
adidas,Allison,Edox,Reebok,Tissot等
输出应为:品牌名称以ア[A,E,I,O,U]开头:adidas Allison Edox
品牌名称从[R]开始:锐步(Reebok)
品牌名称以タ[T]开始:天梭...依此类推,
这是分解它的一种方法:
$listBrandsLetter = array('A', 'K', 'S', 'T', 'N', 'H', 'M', 'Y', 'R', 'W');
$brandsTable = TableRegistry::get('Brands');
foreach($listBrandsLetter as $letter)
{
$currentBrand = $brandsTable->find('all')->where([
'deleted =' => 0
])-> andWhere(['brand_name_eng LIKE :key'
])->bind(':key', $letter.'%'
)-> orWhere(['brand_name_eng LIKE :key'
])->bind(':key', strtolower($letter).'%');
$this->set('brands'.$letter, $currentBrand);
}
如果您的目标是减少由于性能问题而导致的查询数量,请通知我们。如果性能还可以,只需考虑因素
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句