Comment puis-je rechercher un utilisateur par courrier électronique? Je pensais que JTable::load
Le ferait, mais il renvoie une forme de données étrange:
$user = JTable::getInstance('User', 'JTable', array());
$user->load(array("email" => "[email protected]"));
print_r(json_encode($user))
groups": null,
"id": {
"email": "[email protected]"
},
"name": "",
"username": "",
"email": "",
...
JTable::load
Fonctionne cependant comme cela pour les catégories.
$cat = JTable::getInstance('Category', 'JTable', array());
$cat->load(array("title" => "some title"));
Dois-je utiliser JFactory::getDbo()
?
Joomla\CMS\Table\User::load()
ne peut charger des lignes que par ID utilisateur. Utilisez la requête de base de données pour obtenir l'ID utilisateur par courrier électronique et le transmettre à la méthode load()
de la table:
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('id'))
->from($db->quoteName('#__users'))
->where($db->quoteName('email') . ' = ' . $db->quote($email));
$db->setQuery($query);
if ($id = $db->loadResult())
{
$user = JTable::getInstance('User', 'JTable', array());
$user->load($id);
}
else
{
// User with specified $email not found.
}
Si vous ne souhaitez pas modifier les données utilisateur dans la table, vous pouvez utiliser JFactory::getUser()
à la place:
if ($id = $db->loadResult())
{
$user = JFactory::getUser($id);
}