我正在将大型代码库从cake1.2迁移到最新的cake1.3 - 所有这些都一直很顺利,直到我遇到其中一个模型的问题以及如何 find('all)正在生成SQL请求。
find('all')请求位于comments类控制器中,并完整地请求3条评论记录。每个注释SQL记录都有一个angler_id和一个author_id外部,下面的存根来自注释模型。
class Comment extends AppModel {
var $name = 'Comment';
var $belongsTo = array(
Angler' => array( 'className' => 'Angler' ),
Author' => array( 'className' => 'Angler' ),
);
}
钓鱼者的记录在众多其他领域中都有一个名为“最喜欢的诱饵”的领域。作者和钓鱼者都提到钓鱼者记录。注释SQL记录有一个author_id和一个angler_id字段。这在1.2代码中运行得非常好,但由于某种原因,1.3生成以下SQL请求,其中“最喜欢的诱惑”字段(只有那个)是不明确的,我得到1052错误代码。请注意,没有其他钓鱼者字段被抱怨为含糊不清。
查询:SELECT Comment
。id
,Comment
。catch_id
,Comment
。angler_id
,Comment
。{{ 1}},text
。Comment
,datetime
。Comment
,author_id
。Comment
,private
。{{1} },Angler
。id
,Angler
。username
,Angler
。password
,Angler
。email
, Angler
。active
,Angler
。autologin_key
,Angler
。role
,Angler
。first_name
,{{ 1}}。Angler
,last_name
。Angler
,address
。Angler
,city
。Angler
,{{1} }。state
,Angler
。zip
,Angler
,phone
。Angler
,boat
。favorite lure
, Angler
。created
,Angler
。ip
,Angler
。aoty_rank
,Angler
。aoty_points
,{{ 1}}。Angler
,aoty_events
。Author
,id
。Author
,username
。Author
,{{1} }。password
,Author
。email
,Author
。active
,Author
。autologin_key
,Author
。 role
,Author
。first_name
,Author
。last_name
,Author
。address
,Author
。{{ 1}},city
。Author
,state
。Author
,zip
。Author
,phone
。{{1} },Author
。boat
,Author
。created
FROM Author
AS ip
LEFT JOIN Author
AS aoty_rank
ON(Author
。aoty_points
= Author
。aoty_events
)LEFT JOIN comments
AS Comment
ON(anglers
。{{1 }} = Angler
。Comment
)WHERE angler_id
。Angler
= 0 ORDER BY id
。anglers
DESC LIMIT 3
作者和钓鱼者都有相同的领域,但出于某种原因,“最喜欢的诱惑”字段会出现问题。任何有关解决这个问题的建议都非常感谢。
以下是执行查找的代码和运行良好的旧代码。
Author
答案 0 :(得分:0)
好的,所以我明白了。显然有一个DB字段,在"喜欢的诱惑"之类的单词之间有空格。是verboten - 它在cakePHP 1.2中运行良好,但1.3有问题。将其更改为" favorite_lure"修好了一切。
它甚至在http://book.cakephp.org/1.3/en/The-Manual/Basic-Principles-of-CakePHP/CakePHP-Conventions.html - &#34处这样说;带有两个或更多单词的字段名称被强调,如first_name。"
当然,CakePHP没有任何错误或警告,该字段的命名约定是问题 - GRRRRRRR。