2016-11-30 2 views
1

Kann mir jemand sagen, wie man "findby" mit Eingabe als Array von Objekten verwendet? Ich habe Code wie folgt:Wie verwendet man "Findby" -Doktrin mit Eingabe als Array?

public function getIpOnline($acc) 
{ 
    try {      
     $rs = $this->em 
      ->getRepository($this->target) 
      ->findBy(array('login' => $acc)) 
     ; 
    } catch (Exception $e) {   
     echo "ERROR ".$this->target." DAO: ".$e; 
    }    
    var_dump($rs);exit(); 
    return $rs;  
} 

und ich bekam Fehler:

Catchable fatal error: Object of class Character could not be converted to string in /var/www/xxx.com/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php on line 67 

Vielen Dank im Voraus.

Antwort

2

$this->target ist wahrscheinlich ein Objekt, aber Sie müssen den Namen der Klasse eines Objekts zurückgeben.

Haben Sie versucht, get_class zu verwenden?

Oder einfacher Character::class :)

wie Sie gefragt, das ist dein Beispiel mit get_class:

public function getIpOnline($acc) 
{ 
    $nameClass = get_class($this->target); 

    try { 
     $rs = $this->em 
      ->getRepository($nameClass) 
      ->findBy(['login' => $acc]); 
    } catch (Exception $e) { 
     echo 'ERROR ' . $nameClass . ' DAO: ' . $e; 
    } 
    die(var_dump($rs)); 

    return $rs; 
} 
+0

könnte u mir bitte im Detail sagen ?? Ich verstehe nicht. – Hanata

+0

@Hanata In Funktion getRepository ($ repoName); Sie müssen den Klassennamen der Entität übergeben. Zum Beispiel können Sie dort 'Product \ Entity \ Phone' eingeben, oder verwenden Sie die Funktion get_class ($ object) oder verwenden Sie einfach Product :: class. Alle diese Einträge geben den vollständigen Klassennamen mit dem Namespace der Klasse/des Objekts zurück. – Maytyn

0

Sie können es nur für den Fall, wenn die Instanz $name__toString magische Methode haben.

Fox Beispiel:

class Name 
{ 
    public function __toString() 
    { 
     return 'ipad'; 
    } 
} 

$name = new Name(); 
$product = $entityManager->getRepository('Product')->findBy(['name' => $name]); 
0
public function getIpOnline($acc) 
{ 
try {      
    $rs = $this->em->getRepository($this->target)-findBy(['login' => $acc)); 

/* or u can also use findOneBy if expecting result is a single record and find corresponding data only based in $acc 
    $rs = $this->em->getRepository($this->target)-findOneByLogin($acc); 
*/ 

} catch (Exception $e) {   
    echo "ERROR ".$this->target." DAO: ".$e; 
}    
var_dump($rs);exit(); 
return $rs;  

}

auch sehen http://symfony.com/doc/current/doctrine.html#fetching-objects-from-the-database

Verwandte Themen