2011-05-25 48 views
6

我是cakePHP的新手,所以我可能会错过明显的。CakePHP finderQuery是否适用于SQL Server?我会在哪里调试?

系统使用Microsoft SQL Server 2005作为数据库运行最新下载。我很欣赏这有点不寻常,但修复了URL重写,我没有看到其他问题。

我想使用自定义finderQuery,但我似乎甚至不能取代默认。具体而言,如果我使用

var $hasMany = array(
     'RecyclateTypeConversion' => array(
     'className' => 'RecyclateTypeConversion', 
     'foreignKey' => 'recyclate_type_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => 'select RecyclateTypeConversion.* from recyclate_type_conversions AS RecyclateTypeConversion WHERE RecyclateTypeConversion.recyclate_type_id IN ({$__cakeID__$});', 
     'counterQuery' => '' 
    ), 
    }; 

我看到此错误

通知(8):未定义指数: RecyclateTypeConversion [CORE \蛋糕\库\模型\数据源\ dbo_source.php, 线1099 ]

但是,SQL调试输出确认查询本身运行良好并返回4条记录,并且在未指定finderQuery时视图运行完好。我也尝试过其他hasMany表 - 也有同样的问题。

我试图用特定字段选择替换所有选择,但我仍然看到相同的结果。当然查询看起来是正确的根据手册 - 所以是什么问题(并可能与使用MSSQL?)

编辑:此外,因为这还没有拿起任何答案呢,什么是最好的调试这个方法?我已经开始通过蛋糕调试课来狩猎,但迄今为止没有任何结果让我觉得开心。当然,如果出现问题,我会将修复提交回项目。

+0

你跑哪个版本的蛋糕? – jimiyash 2011-05-27 19:58:25

+0

我正在运行1.3。8,几周前下载。我会升级到1.3.9,但我没有看到任何解决修复列表中的问题。 – Cruachan 2011-05-28 22:27:12

回答

2

你检查,原来有一个叫RecyclateTypeConversion模型,它具有根据CakePHP的约定文件名存在?即是否有models/recyclate_type_conversion.php,并且在该文件中,是定义为RecyclateTypeConversion的模型的名称。

您收到的错误似乎暗示该模型名称有问题,因为它无法找到关联的索引。

+0

我检查了这个 - 不,我没有生成模型。但不幸的是,这样做并不能解决问题。 – Cruachan 2011-06-01 10:49:07

+0

那么我没有SQL Server来测试它,但我的第二个猜测是,通过使用'finderQuery',Cake不会以通常的格式存储返回的数据(作为'$ this-> data [Model] [字段]'),但采用不同的格式(通常是'$ this-> data [0]'等),这就是您的未定义索引错误的来源。难道你不能在得到错误之前对你获得的数据执行'debug()'操作吗? – vindia 2011-06-01 13:24:24

+0

接受,因为格式的评论 – Cruachan 2011-07-21 13:54:34

1

你一步一步地通过它?

  1. 尝试让一切(所有数据)
  2. 试条件
  3. 尝试“中可容纳”的行为,以创建查询,这使得想在我看来,一个更容易
+0

当然试过剥离它 - 相同的结果。我对蛋糕很陌生 - 你的意思是一个可容忍的查询?我会开放以不同的方式做到这一点。 – Cruachan 2011-06-02 17:20:07

+0

“可容纳”是您可以使用的行为。你必须添加到$ actAs,那么你不能添加模型到你的查询查询是这样的:'contains'=> array('modelname'),cake会添加数据 – alexdd55 2011-06-03 06:47:28

2

尝试取出来自select的别名 - 在“AS RecyclateTypeConversion”部分中的投射应该为您处理。我也喜欢用双引号包装自定义查询。我可能只是偏执狂,但字符串解析错误已经在我屁股之前。

var $hasMany = array(
    'RecyclateTypeConversion' => array(
    'className' => 'RecyclateTypeConversion', 
    'foreignKey' => 'recyclate_type_id', 
    'dependent' => false, 
    'finderQuery' => "select * from recyclate_type_conversions AS RecyclateTypeConversion WHERE RecyclateTypeConversion.recyclate_type_id IN ({$__cakeID__$});", 
); 

另外,我强烈建议你使用DebugKit插件,回来后给我们的查询日志和查找结果导致错误的调试输出。