Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 99 Ответов
  • 5037 Просмотров
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
JModelList  - для вывода списка, есть готовые методы для сортировки, удаления/изменения состояния/создания (Вообщем CRUD) из списка (правда CRUD работает в пару с JModelAdmin)!
JModelAdmin  - для изменения записи (то есть например редактирование материала)
все, я понял. У меня нет отдельной модели редактирования, оно происходит на странице вывода списка. Надо использовать JModelAdmin
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Блин, что-то нихрена не понимаю. Не выводит список объектов и все.
Цитировать
Ошибка
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Array LIMIT 0, 20' at line 1 SQL=Array LIMIT 0, 20 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Array' at line 1 SQL=Array
Цитировать
Notice: Array to string conversion in C:\OpenServer\domains\virtuemart.local\libraries\joomla\database\driver\mysqli.php on line 561
Notice: Array to string conversion in C:\OpenServer\domains\virtuemart.local\libraries\joomla\database\driver\mysqli.php on line 561

При этом, если вывести дамп таким образом:
Код: php
echo '<pre>';
print_r($result);
echo '<pre>';
то все объекты присутствуют.

Выложу код, гляньте, то там не так
Представление: admin/com_vmgtx/views/products/view.html.php
Спойлер
[свернуть]

Шаблон: admin/com_vmgtx/views/products/tmpl/default.php
Спойлер
[свернуть]

Шаблон: admin/com_vmgtx/views/products/tmpl/default_header.php
Спойлер
[свернуть]

Шаблон: admin/com_vmgtx/views/products/tmpl/default_body.php
Спойлер
[свернуть]

Шаблон: admin/com_vmgtx/views/products/tmpl/default_footer.php
Спойлер
[свернуть]

Модель admin/com_vmgtx/models/products.php
Спойлер
[свернуть]
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Все в точности, как zomby6888 подозревал. Метод getListQuery() должен возвращать объект JDatabaseQuery, а не результат запроса. Что же вы сразу взялись компонент писать, не разобравшись, что к чему: хотя бы откройте и почитайте код класса JModelList(), что ли?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
А оно у вас и не будет работать! Вы в методе getListQuery  вернули запрос! Ведь прямо в названии метода сказано что он должен возвращать get(получить)List(Списка)Query(запрос)! Запрос, а не результат!
В классе JModelList нужно создать всего один метод
Код: php
protected function getListQuery(){
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->join('LEFT', $db->quoteName('#__virtuemart_products', 'p'). 'ON (' . $db->quoteName('p.virtuemart_product_id'). ' = ' . $db->quoteName('pl.virtuemart_product_id'). ')');
$query->join('LEFT', $db->quoteName('#__vmgtx', 'v'). 'ON (' . $db->quoteName('v.id'). ' = ' . $db->quoteName('p.virtuemart_product_id'). ')');
$query->where($db->quoteName('p.published'). ' = 1');
$query->select(array('v.*', 'pl.product_name'));
$query->from($db->quoteName('#__virtuemart_products_' . VmConfig::$vmlang, 'pl'));
$orderCol  = $this->state->get('list.ordering', 'product_name');
$orderDirn = $this->state->get('list.direction', 'ASC');
$query->order($db->escape($orderCol . ' ' . $orderDirn));
return $query;
}
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Все в точности, как zomby6888 подозревал. Метод getListQuery() должен возвращать объект JDatabaseQuery, а не результат запроса. Что же вы сразу взялись компонент писать, не разобравшись, что к чему: хотя бы откройте и почитайте код класса JModelList(), что ли?
как-то так сложилось, что мне проще разбираться в процессе.

А оно у вас и не будет работать! Вы в методе getListQuery  вернули запрос! Ведь прямо в названии метода сказано что он должен возвращать get(получить)List(Списка)Query(запрос)! Запрос, а не результат!
В классе JModelList нужно создать всего один метод
спасибо, так работает
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
мне проще
Вам - да, понимаю, только следующий раз сразу выложите весь свой код.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
сообщение, которое тут было, уже не актуально :)
« Последнее редактирование: 24.07.2016, 21:52:47 от denism300 »
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
не могу разобраться с JToolbarHelper::custom
к примеру, я хочу сделать кнопку, при нажатии на которую что-то там будет записываться в БД.
в view.html.php я описываю кнопку
Код: php
JToolbarHelper::custom('component.task', 'icon', ' ', 'BUTTON_NAME', true); 

далее в контроллере я должен создать функцию с названием task и в ней описать то, что я хочу сделать с БД?
или я манипуляции с БД должен описать в модели, а в контроллере вызывать эту функцию из модели?
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
или я манипуляции с БД должен описать в модели, а в контроллере вызывать эту функцию из модели?
Вся работа с базой пишется в моделе и тейбле(в зависимости от задачи). В контролере идет вызов, можно еще обработку туда же, но тут уже спорный вопрос. Но функции получить добавить в большестве случаев делаются именно в моделе, в крайнем случае в хелпере, хотя как по мне ни кто не мешает подключить модель к хелперу.
Хотя лично я на этапе разработки. все пихаю в контролер к примеру, чтобы не скакать по двум файлам. А потом когда более налажу уже убираю думаю как лучше распределить, и разпихаю.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
в модели вы получаете данные для их дальнейшего отображения в клиенте, в контроллере вы обрабатываете данные, пришедшие от клиента
отвечая конкретно на вопрос: в контроллере однозначно должен существовать метод task, а вот будет он обрабатывать полученные данные сам или вызывать для этого модель или помощник вида - это уже на ваше личное усмотрения разработчика: имхо: не вижу смысла кидать данные туда/сюда, если их можно обработать в одном месте
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Цитировать
не вижу смысла кидать данные туда/сюда, если их можно обработать в одном месте

Зачем вообще тогда нужна MVC если всю логику можно в одном месте разместить? Закидали бы все в шаблон и делов то.  Если мне нужно найти какой то метод который оперирует какими то данными, я в первую очередь полезу в модель. Мне бы не пришло в голову помещать бизнес логику в контроллер. Хотя есть и сторонники толстых контроллеров.

Цитировать
в модели вы получаете данные для их дальнейшего отображения в клиенте, в контроллере вы обрабатываете данные, пришедшие от клиента

Все наоборот. Хотя в Joomla нету специальных методов для получения данных из запроса в контроллере (есть правда свойство $input, которое там не просто так тоже), но следуя концепции mvc, данные правильно получать именно в контроллере. Затем передавать их в модель на обработку. После обработки отдавать эти данные в представление. Как видите у контроллера и так полно забот, чтобы туда еще и бизнес логику заворачивать.
« Последнее редактирование: 25.07.2016, 22:16:00 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #71 : 25.07.2016, 23:23:52 »
Я тему переименовал, т.к. тут уже к первоначальному вопросу обсуждение не относится. Надеюсь, админы не против будут.

Подскажите, как с помощью конструктора запросов JDatabaseQuery составить запрос вида:
Код: php
SELECT IF ((SELECT SUM (field1) FORM (table1)) = (SELECT SUM (field2) FORM (table2)), 1, 0)
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #72 : 03.08.2016, 00:49:10 »
Помогите с запросом.
Что я хочу сделать: при снятии с публикации товара в VirteMart он должен удалиться из таблицы моего компонента.
Я реализовал это так:
Код: php
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__vmgtx'));
//$query->where($db->quoteName('vm_id'). ' = 205');
$query->where($db->quoteName('vm_id'). ' NOT IN (SELECT ' . $db->quoteName('pl.virtuemart_product_id'). ' FROM ' . $db->quoteName('#__virtuemart_products_' . VmConfig::$vmlang, 'pl'). ' LEFT JOIN ' . $db->quoteName('#__virtuemart_products', 'p'). 'ON (' . $db->quoteName('p.virtuemart_product_id'). ' = ' . $db->quoteName('p.virtuemart_product_id').')' . ' WHERE ' . $db->quoteName('p.published'). ' = 1)');
$db->setQuery($query);
$db->execute();
$app->enqueueMessage('Удалено из таблицы компонента '.$db->getAffectedRows().' товаров');

если раскомментировать закомментированное WHERE, и закомментировать незакомментированное WHERE, то будет удалена строка, где vm_id = 205. Т.е. проблем с подключением к БД нет.
подзапрос
Код: php
'(SELECT ' . $db->quoteName('pl.virtuemart_product_id'). ' FROM ' . $db->quoteName('#__virtuemart_products_' . VmConfig::$vmlang, 'pl'). ' LEFT JOIN ' . $db->quoteName('#__virtuemart_products', 'p'). 'ON (' . $db->quoteName('p.virtuemart_product_id'). ' = ' . $db->quoteName('p.virtuemart_product_id').')' . ' WHERE ' . $db->quoteName('p.published'). ' = 1)
возвращает список всех опубликованных товаров
« Последнее редактирование: 03.08.2016, 23:02:32 от denism300 »
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #73 : 04.08.2016, 19:55:01 »
неужели никто не хочет помочь? :(
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Мой первый компонент
« Ответ #74 : 04.08.2016, 20:58:41 »
Ваш подзапрос жутко тормозной как и все конструкции типа IN ( Подзапрос_возвращающий_больше_одного_значения ). И совершенно нечитаемый кстатии) Вы прям отличный привели пример где читаемость query конструкций просто нулевая. Хотя конечно все можно сделать через джоины в вашем случае.

Цитировать
неужели никто не хочет помочь? Sad

А вы вопросы задавайте по существу а не типа того как мне прикрутить че то там к чему то там. Во первых универсальных методов решений для каждой специфической задачи просто не существует. Вы архитектор вашего расширения за вами и его реализация. Сколько вы уже долбитесь с одним компонентом? Месяц уже точно прошел. За это время взяли бы в руки книжки, статьи почитали в интернете и выучили бы матчасть
« Последнее редактирование: 04.08.2016, 21:13:53 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #75 : 04.08.2016, 21:24:22 »
Сколько вы уже долбитесь с одним компонентом? Месяц уже точно прошел. За это время взяли бы в руки книжки, статьи почитали в интернете и выучили бы матчасть
я в свободное время занимаюсь, а его не так много. и статьи тоже читаю.
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #76 : 04.08.2016, 21:46:17 »
Ваш подзапрос жутко тормозной как и все конструкции типа IN ( Подзапрос_возвращающий_больше_одного_значения ).
как его можно переделать? во всех примерах подобных либо IN, либо NOT IN (от условия зависит)
И совершенно нечитаемый кстатии) Вы прям отличный привели пример где читаемость query конструкций просто нулевая. Хотя конечно все можно сделать через джоины в вашем случае.
переделал через $subQuery. стало читабельнее.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Мой первый компонент
« Ответ #77 : 04.08.2016, 22:11:17 »
Цитировать
как его можно переделать? во всех примерах подобных либо IN, либо NOT IN (от условия зависит)

Конструкцию типа:

SELECT ... FROM t1 WHERE a.id IN (SELECT id FROM t2  ... )  ...

Можно всегда переделать так:

SELECT ... FROM t1 INNER JOIN t2 on t1.id = t2.id ...

Это полностью аналог. Только намного производительнее. Если выборка в подзапросе будет по полю которое не уникально то следует добавить distinct оператор(если в выборке только одно поле) или группировку (если полей много).
« Последнее редактирование: 04.08.2016, 22:19:25 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #78 : 04.08.2016, 22:30:42 »
понял, спасибо большое.
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #79 : 05.08.2016, 00:38:57 »
пытаюсь переделать запрос, где уже есть join, т.е. в итоге, там должно получиться 2 join. но он зацикливается.
исходный запрос:
Код: php
$db = JFactory::getDBO();
// Формируем подзапрос
$subQuery = $db->getQuery(true);
$subQuery ->select($db->quoteName('vm.vm_id'));
$subQuery ->from($db->quoteName('#__vmgtx', 'vm'));
// Формируем запрос
$query = $db->getQuery(true);
$query ->select($db->quoteName('pl.virtuemart_product_id'));
$query ->from($db->quoteName('#__virtuemart_products_' . VmConfig::$vmlang, 'pl'));
$query ->join('INNER', $db->quoteName('#__virtuemart_products', 'p'). ' ON (' . $db->quoteName('p.virtuemart_product_id'). ' = ' . $db->quoteName('pl.virtuemart_product_id').')');
$query ->where($db->quoteName('p.published'). ' = 1');
//$query ->where($db->quoteName('p.virtuemart_product_id'). ' NOT IN (' . $subQuery . ')');
$db ->setQuery($query);
$results = $db->loadObjectList();
переделал так:
Код: php
$db = JFactory::getDBO();
// Формируем запрос
$query = $db->getQuery(true);
$query ->select($db->quoteName('pl.virtuemart_product_id'));
$query ->from($db->quoteName('#__virtuemart_products_' . VmConfig::$vmlang, 'pl'));
$query ->join('INNER', $db->quoteName('#__virtuemart_products', 'p'). ' ON (' . $db->quoteName('p.virtuemart_product_id'). ' = ' . $db->quoteName('pl.virtuemart_product_id').')');
$query ->join('LEFT', $db->quoteName('#__vmgtx', 'vm'). ' ON (' . $db->quoteName('vm.vm_id'). ' <> ' . $db->quoteName('p.virtuemart_product_id'). ')');
$query ->where($db->quoteName('p.published'). ' = 1');
$db ->setQuery($query);
$results = $db->loadObjectList();

алгоритм:
вывести virtuemart_product_id из таблицы #__virtuemart_products_ru_ru, которые есть в таблице #__virtuemart_products и имеют параметр p.published=1, но которых нет в столбце vm_id в таблице #__vmgtx
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Мой первый компонент
« Ответ #80 : 05.08.2016, 01:36:55 »
Эхх:

Код: php
$db = JFactory::getDBO();
$query= $db->getQuery(true);
$query->select('pl.virtuemart_product_id');
$query->from($db->quoteName('#__virtuemart_products_' . VmConfig::$vmlang), 'pl'));
$query->join('INNER', '#__virtuemart_products AS p ON p.virtuemart_product_id = pl.virtuemart_product_id');
$query->join('LEFT', '#__vmgtx AS vm ON vm.vm_id = pl.virtuemart_product_id');
$query->where('p.published = 1 AND vm.id is NULL');
$db->setQuery($query);
$results = $db->loadObjectList();

И вот я думаю полезная будет шпаргалка:

http://stackoverflow.com/a/4560613
« Последнее редактирование: 05.08.2016, 01:59:07 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #81 : 09.08.2016, 23:14:17 »
шпаргалка, действительно, полезная. распечатал и повесил перед глазами.
спасибо!
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #82 : 12.08.2016, 00:07:28 »
я, наверное, уже всех тут достал, но еще раз прошу помочь с запросом. Как в этом запросе убрать not in?
Код: php
DELETE FROM table1 AS t1 
WHERE t1.id NOT IN (
   SELECT t2.id
   FROM table2 AS t2
   LEFT JOIN table3 AS t3 ON t3.id = t2.id
   WHERE t3.published = 1)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Мой первый компонент
« Ответ #83 : 12.08.2016, 01:38:32 »
я, наверное, уже всех тут достал
Точно.
Как понять
убрать not in
? В прямом смысле? Тогда уберите, осатвив только
Код: sql
DELETE FROM table1
и будет вам очень большое "счастье".
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Мой первый компонент
« Ответ #84 : 12.08.2016, 04:02:54 »
Конечно запрос:

Код: sql
SELECT t1.id FROM table1 as t1    
   LEFT JOIN table3 AS t3 ON t3.id = t1.id
   LEFT JOIN table2 AS t2 ON t2.id = t3.id
   WHERE t3.id is NULL AND t2.id is NULL OR t3.published != 1

Будет возвращать тот же результат что и:

Код: sql
SELECT t1.id FROM table1 as t1 
  WHERE t1.id NOT IN (
SELECT t2.id FROM table2 AS t2
LEFT JOIN table3 AS t3 ON t2.id = t3.id
WHERE t3.published = 1
  )

Разница в скорости на самом деле не всегда существенна и зависит от многих дополнительных условий. В данном примере она может быть существенна на больших таблицах так как во втором случае 2 условия WHERE, а это значит что выборка будет происходит как для подзапроса так и для результата что естественно скажется на производительности. Но это все касается выборки. В случае с delete операцией вам так или иначе нужно делать выборку из результата запроса поэтому разницы скорее всего никакой не будет.

Да и что вам даст этот пример если вы не понимаете сути? Ну улучшите вы ваш запрос. Но стоит поменяться условиям или вам потребуется новый запрос написать, вы снова пойдете на форум спрашивать как мне переписать запрос? Может имеет смысл чего нибудь почитать про MySQL, попрактиковаться там. Я сам далеко не спец, да и форум то совсем на другую тематику.
« Последнее редактирование: 12.08.2016, 04:06:11 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #85 : 12.08.2016, 09:05:44 »
Да и что вам даст этот пример если вы не понимаете сути? Ну улучшите вы ваш запрос. Но стоит поменяться условиям или вам потребуется новый запрос написать, вы снова пойдете на форум спрашивать как мне переписать запрос? Может имеет смысл чего нибудь почитать про MySQL, попрактиковаться там. Я сам далеко не спец, да и форум то совсем на другую тематику.
суть я немного понимаю, но тут возникли сложности с работой с тремя таблицами. с двумя уже вкурил что и как.
за пример спасибо.

вопрос по теме форума:
как известно, в русском языке у слов после числительных есть окончания (1 предмет, 2 предмета, 5 предметов и т.п.), соответственно, есть желание в сообщениях выводить текст грамотно (т.е., к примеру, "было добавлено 5 элементов", а не "было добавлено 5 элемент"). на просторах есть куча функций, реализующих это. сейчас у меня реализовано так:
Код: php
/**
* Склонение числительных
* @param int $numberof — склоняемое число
* @param string $value — первая часть слова (можно назвать корнем)
* @param array $suffix — массив возможных окончаний слов
* @return string
*/
function numberoff($numberof, $value, $suffix) {
$numberof = abs($numberof);
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $numberof % 100;
$suffix_key = $mod > 4 && $mod < 20 ? 2 : $keys[min($mod%10, 5)];
return $value . $suffix[$suffix_key];
}

// Выводим сообщение в зависимости от текущего языка
$curentLanguage = JFactory::getLanguage();
if ($curentLanguage -> getTag() == 'ru-RU') {
$numberof = $this->numberoff($db->getAffectedRows(), JText::_('COM_VMGTX_PRODUCT_PREFIX'), array(JText::_('COM_VMGTX_PRODUCT_SUFFIX_ONE'), JText::_('COM_VMGTX_PRODUCT_SUFFIX_TWO_FOURTH'), JText::_('COM_VMGTX_PRODUCT_SUFFIX_MORE_FOURTH')));
$mess = JText::_('COM_VMGTX_ADD_PRODUCT_INTRO'). $db->getAffectedRows(). $numberof;
}
if ($curentLanguage -> getTag() == 'en-GB') {
if ($db->getAffectedRows() == 1)
$mess = JText::_('COM_VMGTX_ADD_PRODUCT_INTRO'). $db->getAffectedRows(). JText::_('COM_VMGTX_PRODUCT_SUFFIX_ONE');
else
$mess = JText::_('COM_VMGTX_ADD_PRODUCT_INTRO'). $db->getAffectedRows(). JText::_('COM_VMGTX_PRODUCT_SUFFIX_MORE_THAN_ONE');
}
$app->enqueueMessage($mess);

собственно, вопрос: возможно ли упростить конструкцию используя готовые методы API Joomla?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Мой первый компонент
« Ответ #86 : 12.08.2016, 09:53:05 »
Изобрели велосипед ;) JText::plural() в помощь:
Код: php
$mess = JText::plural('COM_VMGTX_PRODUCT', $db->getAffectedRows());

Языковые константы должны быть:
Код: ini
COM_VMGTX_PRODUCT_0="продуктов"
COM_VMGTX_PRODUCT_1="продукт"
COM_VMGTX_PRODUCT_2="продукта"
COM_VMGTX_PRODUCT_MORE="продуктов"
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #87 : 12.08.2016, 11:33:56 »
b2z
я так понимаю, что этот метод выдает языковую константу в зависимости от последней цифры числа?
в этом случае, для числа 11 он выдаст "продукт", ведь так?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Мой первый компонент
« Ответ #88 : 12.08.2016, 13:12:00 »
Для 11 выдаст "продуктов".

Код: php
public static function getPluralSuffixes($count)
{
if ($count == 0) {
$return = array('0');
} else {
$return = array(($count%10==1 && $count%100!=11 ? '1' : ($count%10>=2 && $count%10<=4 && ($count%100<10 || $count%100>=20)? '2' : 'MORE')));
}
return $return;
}
*

denism300

  • Захожу иногда
  • 209
  • 5 / 0
Re: Мой первый компонент
« Ответ #89 : 13.08.2016, 16:30:21 »
Не могу разобраться, как составить запрос вида:
Код: php
DELETE t1 FROM table1 as t1    
   LEFT JOIN table3 AS t3 ON t3.id = t1.id
   LEFT JOIN table2 AS t2 ON t2.id = t3.id
   WHERE t3.id is NULL AND t2.id is NULL OR t3.published != 1
в конструкторе JDatabase. Я сделал так:
Код: php
$query 	= $db->getQuery(true);
$query ->delete($db->quoteName('table1', 't1'));
$query ->join('LEFT', $db->quoteName('table3', 't3'). ' ON (' . $db->quoteName('t3.id'). ' = ' . $db->quoteName('t1.id'). ')');
$query ->join('LEFT', $db->quoteName('table2', 't2'). ' ON (' . $db->quoteName('t2.id'). ' = ' . $db->quoteName('t3.id'). ')');
$query ->where($db->quoteName('t2.id'). ' IS NULL');
$query ->where($db->quoteName('t3.id'). ' IS NULL OR' . $db->quoteName('t3.published'). ' != 1');
$db ->setQuery($query);
$db ->execute();
На выходе получается запрос
Код: php
DELETE FROM table1 as t1 LEFT JOIN table3 AS t3 ON t3.id = t1.id LEFT JOIN table2 AS t2 ON t2.id = t3.id WHERE t3.id is NULL AND t2.id is NULL OR t3.published != 1
и выдается ошибка в синтаксисе потому что перед FROM нет параметра.

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Только первый абзац

Автор warlocksp

Ответов: 0
Просмотров: 529
Последний ответ 28.11.2017, 15:24:15
от warlocksp