gpt4 book ai didi

php - CakePHP 使用逗号分隔的 ids 连接

转载 作者:行者123 更新时间:2023-11-29 00:17:39 25 4
gpt4 key购买 nike

这里我想用逗号分隔的id连接两个表

例如我的数据是这样的:

[Restaurant] => Array
(
[RST_ID] => 171
[RST_NAME] => oneone
[RST_IMAGE] =>
[RST_CAT_ID] => 2,4,6
[RST_CT_ID] => 27
[RST_IS_TOP] => 3
[RST_QR_CODE] =>
[RST_CREATED_DATE] => 1394536725
[RST_MODIFIED_DATE] => 1394536725
[RST_STATUS] => 1
)

[Category] => Array
(
[CAT_ID] => 2
[CAT_NAME] => Vegetarian
[CAT_CREATED_DATE] => 1375175962
[CAT_MODIFIED_DATE] => 1375175962
[CAT_STATUS] => 1
)

我的模型代码:

 var $belongsTo = array(
'Category' => array(
'className' => 'Category',
'foreignKey' => 'RST_CAT_ID',
'conditions' => array('Category.CAT_ID IN ( Restaurant.RST_CAT_ID)')
)
);

真实查询:

SELECT 
`Restaurant`.`RST_ID`, `Restaurant`.`RST_NAME`, `Restaurant`.`RST_IMAGE`,
`Restaurant`.`RST_CAT_ID`, `Restaurant`.`RST_CT_ID`, `Restaurant`.`RST_IS_TOP`,
`Restaurant`.`RST_QR_CODE`, `Restaurant`.`RST_CREATED_DATE`,
`Restaurant`.`RST_MODIFIED_DATE`, `Restaurant`.`RST_STATUS`,
`Category`.`CAT_ID`, `Category`.`CAT_NAME`, `Category`.`CAT_CREATED_DATE`,
`Category`.`CAT_MODIFIED_DATE`, `Category`.`CAT_STATUS`, `City`.`CT_ID`,
`City`.`CT_NAME`, `City`.`CT_CREATED_DATE`, `City`.`CT_MODIFIED_DATE`,
`City`.`CT_STATUS`
FROM `dailybit_dailybites`.`restaurant` AS `Restaurant`
LEFT JOIN `dailybit_dailybites`.`category` AS `Category`
ON (`Restaurant`.`RST_CAT_ID` = `Category`.`CAT_ID`
AND `Category`.`CAT_ID` IN ( `Restaurant`.`RST_CAT_ID`))
LEFT JOIN `dailybit_dailybites`.`city` AS `City`
ON (`Restaurant`.`RST_CT_ID` = `City`.`CT_ID`)
WHERE 1 = 1

那么这里的解决方案是什么?

它只为我提供了一个仅用于第一个 ID 的类别数据。

最佳答案

先看看这个问题:MySQL search in comma list

如您所见,belongsTo 查询只是在单个 id 上生成一个连接,默认情况下 CakePHP 不考虑这种特殊情况。您将不得不更改您的查询并手动传递所有 ID,但是您的数据库设计很糟糕并且 it doesn't follow the CakePHP conventions完全没有。

  • 如何防止重复(这会浪费空间)
  • 如何删除给定值(需要自定义函数,可能会导致错误?
  • 随着我的表格大小的增加,您如何应对性能问题?

您不应更改查询,而应更改这种笨拙的数据库设计。 You want to use HABTM here and a join table : 餐厅 hasAndBelongsToMany 类别。

restaurants <-> restaurants_categories <-> categories

如果您坚持使用这种糟糕的数据库设计,您将不得不使用 bindModel() 并手动设置条件:

'conditions' => array('FIND_IN_SET (Category.CAT_ID, ' . $listOfIds. ')')

我还没有测试过这个,你自己试试吧,看FIND_IN_SET() vs IN()

你必须有另一种方法来获得你之前在这里想要的所有 ID。正如我所说,这是无效和糟糕的设计。

关于php - CakePHP 使用逗号分隔的 ids 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com