Поиск на основе функции MySQL в CakePHP - PullRequest
0 голосов
/ 18 мая 2011

Я пытаюсь выбрать строки базы данных в CakePHP на основе значения MAX () поля из другой таблицы.Вот SQL, который я пытаюсь выполнить:

SELECT `questions`.* FROM `tests`,`questions` GROUP BY `questions`.`id` HAVING  `questions`.`test_id` = MAX(`tests`.`id`);

(Или что-то эквивалентное. По сути, я пытаюсь просто извлечь все строки из таблицы вопросов, где test_id равен наибольшему значению идентификатора втаблица тестов.)

Самая близкая вещь, которую я смог сделать в CakePHP, используя find(), это то, что выполняет два запроса:

$current_test = $this->find('first',array('fields'=>array('MAX(Test.id) as current_test')));

$questions = $this->find('all',array(
    'conditions'=>array('Question.test_id'=>$current_test[0]['current_test'])
));

Это дает мне нужные мне результаты, ноэто кажется ненужным.Есть ли какой-нибудь способ в CakePHP поместить это в один запрос?

1 Ответ

2 голосов
/ 18 мая 2011

Если ваши отношения модели настроены правильно, и я понимаю вашу базу данных, должно работать следующее (при условии, что этот код написан ВНУТРИ вашей тестовой модели. Если она находится за пределами вашей тестовой модели (т.е. в контроллере),нужно использовать $ this-> Test-> find.

$test = $this->find( 'first', array(
    'order'     => 'Test.id desc',
    'recursive' => 1,
));

, который должен возвращать что-то вроде:

$test = array(
    [Test] => array(
        'id'  => X,
        'etc' => '...'
    ),

    [Questions] => array( 
        [0] => array( 'test_id' => X, 'question_id' => 1  ),
        [1] => array( 'test_id' => X, 'question_id' => 7  ),
        [2] => array( 'test_id' => X, 'question_id' => 10 ),
    ),
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...