2

我需要使用 propel orm 2.0.0 从两个表中选择特定的列集。等效查询如下

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;

我在两个表上的必要列具有相同名称但需要使用不同列连接的地方苦苦挣扎。

帮助我使用推进 php 代码以及适当的参考站点。官方网站上的文档不是一个好的教程。

4

2 回答 2

4

如果您正确定义了模型,这应该可以工作。

$rows = BrandQuery::create()
    ->select(['name', 'grade'])
    ->joinWith('dealer')
    ->withColumn('dealer.name', 'dealer_name')
    ->withColumn('dealer.number')
    ->find();
于 2016-06-30T08:16:17.977 回答
1

您需要使用 ORM。假设所有模型都正确设置:

<?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
}

另一种(我认为更好)的方法是使用自定义 SQL。

<?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();
于 2016-04-10T21:44:35.483 回答