如何在推进中选择表连接上的特定列?

Posted

技术标签:

【中文标题】如何在推进中选择表连接上的特定列?【英文标题】:How do I select specific columns on table join in propel? 【发布时间】:2016-04-10 19:14:14 【问题描述】:

我需要使用 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;

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

帮助我使用 propel php 代码以及适当的参考站点。官网的文档不是很好的教程。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您需要使用 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();

【讨论】:

以上是关于如何在推进中选择表连接上的特定列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有前缀列的表连接到 PHP MySQL 或 Laravel 中的另外两个表

如何将表连接到联合查询的结果

如何在 Doctrine ORM 中使用 createQueryBuilder 选择特定列?

如何在laravel中选择特定列

在序列化程序中使用深度时如何选择特定列

如何在 Oracle Sql Developer 中选择特定的列标题