【问题标题】:How to use phalcon createbuilder for join multiple tables如何使用 phalcon createbuilder 连接多个表
【发布时间】:2017-08-23 13:59:57
【问题描述】:

这是使用 PHQL 显示 3 个不同表中的行的工作代码。我想使用$this->modelsManager->createBuilder() 编写相同的代码。请在下面找到工作代码和错误。

控制器

<?php
    $phql  = 'SELECT product.*, currency.*, unittype.* FROM product LEFT JOIN currency ON product.CurrencyId=currency.Id LEFT JOIN unittype ON product.UnitTypeId=unittype.Id ORDER BY product.Name ASC';
    $query = $this->modelsManager->createQuery($phql);
    $this->view->products = $query->execute();
?>

查看

<table class="table">
    <tr>
        <th>Name</th>
        <th>Description</th>
        <th>Unit Type</th>
        <th>Price</th>
        <th>Currency</th>
        <th></th>
        <th></th>
    </tr>
    <?php foreach($products as $row)    { ?>
    <tr>
        <td><?php echo $row->product->Name; ?></td>
        <td><?php echo $row->product->Description; ?></td>
        <td><?php echo $row->unittype->Name; ?></td>
        <td><?php echo $row->product->Price; ?></td>
        <td><?php echo $row->currency->Code; ?></td>
        <td><?php echo $this->tag->linkTo('product/edit/'.$row->product->Id,'Edit'); ?></td>
        <td><?php echo $this->tag->linkTo('product/delete/'.$row->product->Id,'Delete'); ?></td>
    </tr>
    <?php } ?>
</table>

我想使用modelmanager的createbuilder;如何编写查询和 打印视图?

下面是我写的有问题的代码:

控制器

<?php
    $this->view->products = $this->modelsManager->createBuilder()
        ->from('product')
        ->innerjoin('currency','product.CurrencyId=currency.Id')
        ->orderBy('product.Name')
        ->getQuery()
        ->execute();
?>

查看

<table class="table">
    <tr>
        <th>Name</th>
        <th>Description</th>
        <th>Unit Type</th>
        <th>Price</th>
        <th>Currency</th>
        <th></th>
        <th></th>
    </tr>
    <?php foreach($products as $product)    { ?>
    <tr>
        <td><?php echo $product->Name; ?></td>
        <td><?php echo $product->Description; ?></td>
        <td><?php echo $product->UnitTypeId; ?></td>
        <td><?php echo $product->Price; ?></td>
        <td><?php echo $product->currency->Id; ?></td>
        <td><?php echo $this->tag->linkTo('product/edit/'.$product->Id,'Edit'); ?></td>
        <td><?php echo $this->tag->linkTo('product/delete/'.$product->Id,'Delete'); ?></td>
    </tr>
    <?php } ?>
</table>

以上代码产生以下错误:

注意:试图获取非对象的属性 C:\wamp\www\xxxx.volt.php 在第 xx 行

【问题讨论】:

  • xx 是哪一行?您是否尝试过&lt;?php die(var_dump($products)) ?&gt; 以查看是否返回任何数据?
  • @PaulSCoder 是的,它返回的是空数组
  • @PaulSCoder 如果你需要我的完整源代码,你可以在这里找到github.com/syednizamudeen/invoice

标签: php mysql phalcon


【解决方案1】:

在你的控制器中试试这个。结果数据应该是Resultset

$builder = $this->modelsManager->createBuilder();

$builder
    ->columns(
        [
            'Product.Id'          => 'productId',
            'Product.Name'        => 'productName',
            'Product.Description' => 'productDescription',
            'Unittype.Name'       => 'unitTypeName',
            'Product.Price'       => 'productPrice',
            'Currency.Code'       => 'Currency.Code',
        ]
    )
    ->addFrom('Product')
    ->leftJoin('Currency', 'Product.CurrencyId = Currency.Id')
    ->leftJoin('Unittype', 'Product.UnitTypeId = Unittype.Id')
    ->orderBy('Product.Name')
    ->getQuery();

$data = $builder->execute();

var_dump($data);

这将只返回您在视图中拥有的字段。

【讨论】:

  • &lt;?php $builder = $this-&gt;modelsManager-&gt;createBuilder() -&gt;columns( [ 'ProductId' =&gt; 'product.Id', 'ProductName' =&gt; 'product.Name', 'ProductDescription' =&gt; 'product.Description', 'UnittypeName' =&gt; 'unittype.Name', 'ProductPrice' =&gt; 'product.Price', 'CurrencyCode' =&gt; 'currency.Code', ] ) -&gt;addFrom('product') -&gt;leftJoin('currency', 'product.CurrencyId = currency.Id') -&gt;leftJoin('unittype', 'product.UnitTypeId = unittype.Id') -&gt;orderBy('product.Name') -&gt;getQuery() -&gt;execute(); ?&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
相关资源
最近更新 更多