This Méthode de création d’une sous-requête à l’aide de JDatabase fournit des informations intéressantes et j’estime qu’il serait utile de disposer d’une méthode convenue de sous-requête documentée. Je suis tombé dessus parce que je voulais faire la même chose, mais en tant que déclaration insérée. Le plus proche que j'ai jamais eu a été répliqué la table entière parce que pour une raison quelconque je continue à perdre les colonnes.
$query = $db->getQuery(true);
$pre = $db->getQuery(true);
// Insert columns.
$columns = array('user_id', 'title', 'ordering', 'published', 'description');
$now = $query->currentTimestamp();
// Insert values.
$pre->insert($db->qn('#__table'))->columns($db->qn($columns));
// Prepare the insert query.
$query->select(array(
$db->q('') . ' AS id',
$db->qn('user_id'),
$db->qn('c.name', 'title'),
$db->q('1') . ' AS published',
$db->q('') . ' AS ordering',
$db->q('') . ' AS created_by',
$now . ' AS created_on',
$db->q('') . ' AS modified_by',
$db->q('') . ' AS modified_on',
)
)
->from($db->qn('#__other_table', 'c'));
$query = $pre . $query ;
// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();
Bien que cette question soit ancienne, elle pourrait être utile aux autres. Voici la requête d’insertion par sélection utilisant JDatabase.
Construire une requête select en utilisant JDatabase
$querySelect = $db->getQuery(true)
->select('id, title')
->from('sometable');
Maintenant votre requête d'insertion
$queryInsert = $db->getQuery(true)
->insert('anothertable')
->columns($db->qn(array('id','title')))
->values($querySelect)
J'espère que cela t'aides.
Vous devez taper les valeurs que vous voulez insérer
$pre->insert($db->qn('#__table'))->columns($db->qn($columns))->values(here values);