2016-04-10 2 views
2

J'ai besoin de sélectionner un ensemble spécifique de colonnes à la fois de la table à l'aide de propel orm 2.0.0. La requête équivalente est comme ci-dessousComment sélectionner des colonnes spécifiques dans la table jointe dans propel?

select b.name as brand_name, b.grade, d.name as dealer_name, d.number 
from brand as b join dealer as d 
on d.id = b.dealer_id; 

Je me bats où les colonnes nécessaires sur les deux tableaux ont le même nom, mais ils doivent se joindre à l'aide d'autre colonne. Aidez-moi avec le code php propel et aussi avec le site de référence approprié. Le document sur le site officiel n'est pas un bon tutoriel.

Répondre

2

Cela devrait fonctionner, à condition que vous ayez correctement défini vos modèles.

$rows = BrandQuery::create() 
    ->select(['name', 'grade']) 
    ->joinWith('dealer') 
    ->withColumn('dealer.name', 'dealer_name') 
    ->withColumn('dealer.number') 
    ->find(); 
1

Vous devez utiliser ORM. En supposant que tous les modèles sont correctement configurés:

<?php 
$brands = BrandQuery::create()->find(); 
// $brands contains a collection of Brand objects 
// one object for every row of the brand table 
foreach($brands as $brand) { 
    $dealers = $brand->getDealers(); 
    // $dealers contains a collection of Dealer objects for this brand 
    // one object for every row of the dealers table for brand row 
} 

Un autre (et je pense que mieux) ici serait d'utiliser SQL personnalisé.

<?php 
use Propel\Runtime\Propel; 
$con = Propel::getWriteConnection(YOUR_DATABASE_NAME); 
$sql = "select b.name as brand_name, b.grade, d.name as dealer_name, d.number from brand as b join dealer as d on d.id = b.dealer_id"; 
$stmt = $con->prepare($sql); 
$stmt->execute();