web-dev-qa-db-fra.com

Supprimer des éléments de base de données via CLI

Je voudrais supprimer certains éléments avec l'état "mis à la corbeille" via CLI. Est-il possible d'appeler la méthode delete de JTable à partir de la CLI?

Merci de votre aide :-)

1
MyFault

Cela fait longtemps que je n’ai pas fait cela, mais si je me souviens bien, mettre ceci dans doExecute devrait faire ce que vous voulez.

$basePath = JPATH_ADMINISTRATOR.'/components/com_content';
require_once $basePath.'/models/article.php';
$artmodel = new ContentModelArticle(array('table_path' => $basePath.'/tables'));

$db = JFactory::getDbo();
$q = "SELECT * FROM #__content WHERE `state` = '-2'";
$db->setQuery($q);
if( $rows = $db->loadObjectList() ) {
    foreach($rows as $row){
        $this->out('Removing '.$row->title);
        $result = $artmodel->delete($row->id);
    }
}

Dans votre cas, vous supprimez des éléments déjà mis à la corbeille (état = -2), mais pour l'enregistrement, ce code ne fonctionnera pas, à moins que ce ne soit le cas. Pour supprimer un enregistrement qui n'est PAS mis à la corbeille, vous devez d'abord le jeter à l'aide de la commande ->save méthode antérieure à la ->delete méthode:

$data = array('id' => $row->id,'state'=>'-2');
$result = $artmodel->save($data);
$result = $artmodel->delete($row->id);
4
GDP