Joomla: Кажется, я не могу удалить или создать таблицы или даже удалить строки, используя JDatabase - PullRequest
0 голосов
/ 01 апреля 2012

Это подмножество более крупного запроса, который я разработал в phpmyadmin, но я немного растерялся и запутался в синтаксисе, заставляющем его работать в компоненте, который я создаю в Joomla.

Код, который работает в phpmyadmin:

drop table if exists tests_mod_ques;
create table tests_mod_ques as
select p.student_userid, q.question_mod, q.question_id, p.student_passedchk

from `tests_students` p 
inner join `tests_questions` q on p.question_id = q.question_id
group by  p.student_userid, q.question_mod, q.question_id, p.student_passedchk
;

Код, который выдает синтаксическую ошибку 1064:

$query = parent::getListQuery(); 

$query->dropTable('#__tests_mod_ques', 'true');
$query->createTable('#__tests_mod_ques AS 
    select (p.student_userid
    , q.question_mod
    , q.question_id
    , p.student_passedchk)
    ');
$query->from('#__tests_students AS p');
$query->join('#__tests_questions AS q ON p.question_id = q.question_id');
$query->group('p.student_userid
    , q.question_mod
    , q.question_id
    , p.student_passedchk
    '); 

  ....  
    $db = $this->getDbo();
    return $query;  

Я протестировал только определение dropTable и даже при том, что он не выдал ошибкуон не удалял таблицу и не отображался в отладчике, поэтому я, вероятно, не использую это право: http://api.joomla.org/Joomla-Platform/Database/JDatabase.html#dropTable

Не могу найти ни одной ссылки для создания, кроме этой: http://api.joomla.org/Joomla-Platform/Database/JDatabase.html#getTableCreate

Также у меня появляется запрос INSERT…ON DUPLICATE KEY UPDATE, к которому я тоже не знаю, как поступить.

Спасибо!

Редактировать

Я пытался удалить строки в качестве обходного пути, также не регистрируется.Опять проверил отладчик и запрос на удаление не появляется.

$query->delete('#__tests_mod_ques');

Это должно работать в соответствии с http://api.joomla.org/Joomla-Platform/Database/JDatabaseQuery.html#$delete и http://docs.joomla.org/JDatabaseQuery::delete/1.6

Разочарование!У кого-нибудь есть идеи?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июня 2012

Проблема должна заключаться в том, что $ query относится к классу JDatabaseQuery из-за того, как вы его инициализировали, поэтому он содержит только перечисленные здесь методы: http://docs.joomla.org/JDatabaseQuery/1.6

Методы, которые вы пытаетесьcall - это на самом деле методы JDatabase, экземпляр которых вы создаете в конце.Итак, вы должны быть в состоянии сделать $ db-> createTable (... и т. Д., И он действительно запустится.

0 голосов
/ 11 мая 2012

Вы можете попробовать следующее -

$query->createTable('#__tests_mod_ques AS 
select (p.student_userid
, q.question_mod
, q.question_id
, p.student_passedchk)
from #__tests_students AS p
inner join #__tests_questions AS q ON p.question_id = q.question_id
group by p.student_userid
, q.question_mod
, q.question_id
, p.student_passedchk');
...