web-dev-qa-db-fra.com

Rechercher un utilisateur par email

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()?

1
steel

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);
}
3
Sharky