2014-09-18 2 views
0

Я нахожусь в середине переноса большой базы кода от cake1.2 до последней версии cake1.3 - все идет хорошо, пока я не попал в проблему с одной из моделей и как find ('all) генерирует запрос SQL.cakephp 1.3 принадлежит неоднозначности 1052 выпуск

Запрос на поиск ('all') находится в контроллере класса комментариев и полностью запрашивает 3 комментария. Каждая запись SQL-комментариев комментариев имеет angler_id и author_id foreign, а нижняя заглушка - из модели комментариев.

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. text, Comment. datetime, Comment. author_id, Comment. private, Angler. id, Angler. username, Angler. password, Angler. email, Angler. active, Angler. autologin_key, Angler. role, Angler. first_name, Angler. last_name, Angler. address, Angler. city, Angler. state, Angler. zip, Angler. phone, Angler. boat, favorite lure, Angler. created, Angler. ip, Angler. aoty_rank, Angler. aoty_points, Angler. aoty_events, Author. id, Author. username, Author. password, Author. email, Author. active, Author. autologin_key, Author. role, Author. first_name, Author. last_name, Author. address, Author. city, Author. state, Author. zip, Author. phone, Author. boat, Author. created, Author. ip, Author. aoty_rank, Author. aoty_points, Author. aoty_events ОТ comments КАК Comment LEFT JOIN anglers AS Angler ВКЛ (Comment. angler_id = Angler. id) LEFT JOIN anglers AS Author ВКЛ (Comment. author_id = Author. id) где Comment. private = 0 ЗАКАЗАТЬ Comment.datetime DESC LIMIT 3

Оба автора и ангела имеют одинаковые поля, но по какой-то причине вещи сходят с поля любимой приманки. Любые советы по его решению очень приветствуются.

Вот код, который выполняет поиск и старый код, который работал нормально.

// OLD CODE FINDALL 
// $comments = $this->Comment->findAll(array('Comment.private' => 0), null, 'Comment.datetime DESC', $count); 
     // 1.3 MOD 
     $params = array(
     'conditions' => array('Comment.private' => 0), // array 
     'fields' => null,   // array 
     'order' => 'Comment.datetime DESC',    // array or string 
     'limit' => $count,  // int 
    // 'page' => ,    // int 
    // 'recursive' => 0  // int 
     ); 

$comments = $this->Comment->find('all', $params); 

ответ

0

ОК, поэтому я понял. По-видимому, наличие поля БД с пробелом между словами «любимая приманка» является верботеном - он отлично работал в cakePHP 1.2, но у 1.3 есть проблемы с ним. Изменение его на «favorite_lure» исправило все.

Он даже сказал так в http://book.cakephp.org/1.3/en/The-Manual/Basic-Principles-of-CakePHP/CakePHP-Conventions.html - «Имена полей с двумя или несколькими словами подчеркнуты как, first_name».

Конечно, у CakePHP нет ошибки или предупреждения о том, что соглашение об именах полей является проблемой - GRRRRRRR.

 Смежные вопросы

  • Нет связанных вопросов^_^