sql >> Database teknologi >  >> RDS >> Mysql

PDO FETCH_CLASS med sammenføjede tabeller

Der er ingen støtte til direkte i BOB så vidt jeg ved. Typisk, hvis du har brug for at oprette en kompleks objektgraf fra resultatet af forespørgslen, er det en ORM's ansvar.

Hvis du har brug for denne funktionalitet, vil jeg anbefale at bruge doktrin eller Propel i modsætning til at skrive noget selv. Der er også andre, der måske er lettere, men jeg har ingen erfaring med dem.

EDIT:

Jeg tror måske, jeg har misforstået spørgsmålet, da jeg er sikker på, at andre kan. Jeg tror, ​​det egentlige spørgsmål var, hvordan man fik adgang til de sammenføjede kolonner, ikke nødvendigvis, hvordan man opretter et objekt ud fra dem.

I så fald skal du blot bruge en standard arry fethc-metode som PDO::FETCH_ASSOC , PDO::FETCH_NUMERIC eller PDO::FETCH_BOTH vil give dig alle de kolonner, du spurgte efter.

Så hvis du vil gøre det til en "objektgraf", skal du gøre det manuelt, ikke ved at bruge PDO::FETCH_CLASS .

For eksempel:

//$db is pdo:
// also notice im aliase the columns prefixing the name so that we can tell what belongs to
// post and what belongs to user, an alternative approach would be to use FETCH_NUMERIC,
// which just uses the column positions from the seelct statement as the keys
// so in this case post.id would be in the array as key 0, and user.name would be in the
// array as key 4
$stmt = $db->prepare('SELECT post.id as p_id, 
       post.text as p_text, 
       post.user_id as p_user_id, 
       user.id as u_id, 
       user.name as u_name
FROM POST INNER JOIN User on post.user_id = user.id');

$stmt->execute();

while (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
   print_r($row);
   /* will output:
      Array (
         'p_id' => 'value'
         'p_text' => 'value'
         'p_user_id' => 'value'
         'u_id' => 'value',
         'u_name' => 'value'
      )
   So now you need to decide how to create your objects with the information returned
   */
}


  1. MySQL-adgangskodeinput i bash-script

  2. Træk dage fra en dato i PostgreSQL

  3. Hvordan forbedres ydeevnen for dato- og tidsfiltrering i SQL Server?

  4. MySQL ACOS() Funktion – Returner Arc Cosinus for et tal