将php列表数据及其相关值转换为逗号删除的id
我的数据库具有与多个城市相关的类别表。在categories表中,city列具有逗号分隔的id,例如1、2、3。 从categories表检索数据时,我希望city列包含相应的城市名称,而不是城市id将php列表数据及其相关值转换为逗号删除的id,php,mysql,cakephp,Php,Mysql,Cakephp,我的数据库具有与多个城市相关的类别表。在categories表中,city列具有逗号分隔的id,例如1、2、3。 从categories表检索数据时,我希望city列包含相应的城市名称,而不是城市id $categoryDetails = $this->Category->find('first',array('conditions'=>array('slug'=> $slug))); Array ( [Category] => Array (
$categoryDetails = $this->Category->find('first',array('conditions'=>array('slug'=> $slug)));
Array
(
[Category] => Array
(
[id] => 10
[parent_id] => 2
[city] => 2, 3, 4, 5, 6, 7, 8, 9, 10
[slug] => college
[type] =>
[lft] => 31
[rght] => 32
[name] => College
[description] => College
[image_name] => 1376938860_1185824_431052847008731_328184125_n.jpg
[created] => 1376938860
[modified] => 1376938860
)
)
CakePHP是为处理模型关系而设计的,您所做的是完全绕过Cake的设计目的。此外,通常不希望通过将ID存储在逗号分隔的列表中来链接单独表中的条目 如果一个城市只属于一个类别,请使用hasMany关系。如果一个城市可以属于多个类别,请使用HABTM关系 我猜你可能想要的是HABTM的关系。从categories(类别)表中删除city(城市)字段,并创建一个具有字段category(类别)id和city(城市)id的其他categories(城市)表。对于您给出的示例,它应该如下所示:
category_id | city_id
10 | 2
10 | 3
10 | 4
10 | 5
10 | 6
10 | 7
10 | 8
10 | 9
10 | 10
然后将以下内容添加到类别模型中:
public $hasAndBelongsToMany = array(
'City' =>
array(
'className' => 'City',
'joinTable' => 'categories_cities',
'foreignKey' => 'city_id',
'associationForeignKey' => 'category_id',
'unique' => true,
)
);
一旦您建立了关系,当您为该类别进行查找时,Cake自然会获取与该类别相关的城市,假设模型的递归属性设置为0或更高。(默认设置为1。)或者,您可以使用containable行为。感谢Kai提供的解决方案,它很好,而且肯定会很好地工作。但问题是,我有更多的数据,像这样的城市,如优惠,事件,服务,业务等。这样的数据库将是太大,我必须改变整个数据库,因为管理员准备使用只有前线我必须工作。如果可能的话,请给出任何其他想法。更改数据库不应使其变得太大。编写脚本将现有数据转换为不同的模式也应该相当容易。这样一来,您的数据库就很容易出现问题,除非您非常非常小心地维护完整性,例如,如果您删除了一个城市,您必须检查所有类别,确保它们不再位于城市字段中。如果你真的必须保持这种方式,你将不得不做一个手动查找每个城市在外地。但我真的不推荐它。