tp5框架中 public function getkefanglist(){ $list=Db::name("kefang") ->field(['id','name','area','bed_size','price', 'kefangtag_ids','smallimage','hotel_limages','kefangother_ids']) ->where('status',1) ->select(); }这个方法查到的list中的kefangtag_ids是以单独一个数字例如1或字符串1,2,3这样存在,需要拿它去跟kefang_tag表中的id字段进行查询,查询到的tagname需要插入到每个$list中,应该怎么写
时间: 2024-01-01 14:04:08 浏览: 94
如果`kefangtag_ids`字段中只包含单个数字或者以逗号分隔的数字字符串,您可以使用`whereIn`方法来查询`kefang_tag`表中相应的记录,并将查询到的`tagname`插入到每个`$list`中。以下是您可以尝试的代码示例:
```php
public function getkefanglist(){
$list = Db::name("kefang")
->field(['id','name','area','bed_size','price',
'kefangtag_ids','smallimage','hotel_limages','kefangother_ids'])
->where('status', 1)
->select();
$tagIds = [];
foreach ($list as $item) {
if (strpos($item['kefangtag_ids'], ',') !== false) {
$tagIds = array_merge($tagIds, explode(',', $item['kefangtag_ids']));
} else {
$tagIds[] = $item['kefangtag_ids'];
}
}
$tagIds = array_unique($tagIds);
$tags = Db::name("kefang_tag")
->whereIn('id', $tagIds)
->select();
$tagMap = [];
foreach ($tags as $tag) {
$tagMap[$tag['id']] = $tag['tagname'];
}
foreach ($list as &$item) {
if (strpos($item['kefangtag_ids'], ',') !== false) {
$tagIds = explode(',', $item['kefangtag_ids']);
$tagNames = [];
foreach ($tagIds as $tagId) {
if (isset($tagMap[$tagId])) {
$tagNames[] = $tagMap[$tagId];
}
}
$item['tag_names'] = implode(',', $tagNames);
} else {
if (isset($tagMap[$item['kefangtag_ids']])) {
$item['tag_names'] = $tagMap[$item['kefangtag_ids']];
} else {
$item['tag_names'] = '';
}
}
}
return $list;
}
```
在上面的示例中,我们首先获取了`kefang`表中的所有记录。然后,我们根据`kefangtag_ids`字段的格式,将标签ID提取出来,并保存到`$tagIds`数组中。接下来,使用`whereIn`方法查询`kefang_tag`表中的相关记录,并将查询到的标签信息保存到`$tags`数组中。然后,我们使用一个关联数组`$tagMap`来建立标签ID与标签名称的映射。最后,遍历`$list`中的每个记录,根据标签ID查找对应的标签名称,并将结果保存到`tag_names`字段中。
请注意,以上代码仅提供了一种实现方式,您可以根据实际需求进行调整和优化。
阅读全文