Я нахожусь в середине переноса большой базы кода от 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);