使用Joomla删除另一个表中的多个行

时间:2013-04-20 20:58:49

标签: php mysql joomla

我在互联网上搜索了这个问题的一个很好的答案,但没有结果。我试图删除另一个表中的多个行,而不是从正在执行组件的位置删除。

基本上,当我删除组件A中的4行时,这些行也必须在组件B中删除。该键存在于另一个表中,因此这不是问题。我可以通过一些快速和脏的mysql查询轻松完成它,但我想用Joomla的内置方法来做。

在joomla中,从JControllerAdmin使用delete方法,其中使用getModel获取模型,然后执行另一个delete方法。但我似乎无法找到实际删除行的删除方法所在的位置。

BTW我已经从JControllerAdmin复制粘贴了删除方法并将其粘贴到我自己的控制器中。我确实更改了名称,但一切正常

所以现在我转向Stackoverflow来解决我的问题。简而言之:我有一个customDelete()方法,它是来自JControllerAdmin类的delete方法的相同副本,我想添加一些功能,允许我使用customDelete()方法中的id来删除另一个表中的行

我希望这很清楚:)

谢谢!

编辑: 这是控制器中的delete方法。我必须删除#__modeling(对应于组件B的表)中包含id $cid

内的所有行
    public function customDelete() {

    // Check for request forgeries
    JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));

    // Get items to remove from the request.
    $cid = JRequest::getVar('cid', array(), '', 'array');

    if (!is_array($cid) || count($cid) < 1) {
        JError::raiseWarning(500, JText::_($this->text_prefix . '_NO_ITEM_SELECTED'));
    } else {
        // Get the model.
        $model = $this->getModel();

        // Make sure the item ids are integers
        jimport('joomla.utilities.arrayhelper');
        JArrayHelper::toInteger($cid);
        // Remove the items.
        if ($model->delete($cid)) {
            $this->setMessage(JText::plural($this->text_prefix . '_N_ITEMS_DELETED', count($cid)));
        } else {
            $this->setMessage($model->getError());
        }
    }

1 个答案:

答案 0 :(得分:3)

这不是那么难。

基本上你需要做的就是调用一个与#__modeling表相关的不同模型。所以你需要一个我们可以称之为建模的模型,它看起来像:

<?php

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

// import Joomla modelform library
jimport('joomla.application.component.modeladmin');

/**
 * Modeling Model
 */
class MyModelModeling extends JModelAdmin { 

  /**
   * Returns a reference to the a Table object, always creating it.
   *
   * @param type    The table type to instantiate
   * @param string  A prefix for the table class name. Optional.
   * @param array   Configuration array for model. Optional.
   * @return    JTable  A database object
   * @since 1.6
   */
  public function getTable($type = 'Modeling', $prefix = 'MyTable', $config = array()) 
  {
    return JTable::getInstance($type, $prefix, $config);
  }

}

<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla modelform library jimport('joomla.application.component.modeladmin'); /** * Modeling Model */ class MyModelModeling extends JModelAdmin { /** * Returns a reference to the a Table object, always creating it. * * @param type The table type to instantiate * @param string A prefix for the table class name. Optional. * @param array Configuration array for model. Optional. * @return JTable A database object * @since 1.6 */ public function getTable($type = 'Modeling', $prefix = 'MyTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } }

上面的模型扩展了JModelAdmin(它有删除方法)并告诉delete方法要删除哪个表(因为getTable是由delete()方法调用的)。它应该在管理员/你的组件/模型中。

您还需要一个JTable类,如下所示:

因此,您可以看到JTable类指向要删除的表。这应该进入yourcomponent / tables文件夹。

然后,您应该能够更改customDelete方法,如下所示:

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_users
 *
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Modeling table class
 *
 * @package     Joomla.Administrator
 * @subpackage  com_users
 * @since       2.5
 */
class MyTableModeling extends JTable
{
    /**
     * Constructor
     *
     * @param  JDatabaseDriver  &$db  Database object
     *
     * @since  2.5
     */
    public function __construct(&$db)
    {
        parent::__construct('#__modeling', 'id', $db);
    }
}

<?php /** * @package Joomla.Administrator * @subpackage com_users * * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Modeling table class * * @package Joomla.Administrator * @subpackage com_users * @since 2.5 */ class MyTableModeling extends JTable { /** * Constructor * * @param JDatabaseDriver &$db Database object * * @since 2.5 */ public function __construct(&$db) { parent::__construct('#__modeling', 'id', $db); } }

HTH

A