cakephp 3.0查询数据操作?

时间:2015-08-20 21:38:03

标签: orm cakephp-3.0 query-builder

我正在尝试学习cakephp 3和ORM功能,到目前为止它很棒。但是知道我正在谈论我不确定如何以最好的方式接受它,所以我希望有人能说出最好的方法。

我正在使用查询构建器来加载一个或多个产品。在加载的数据中,我有一个名为price的字段。这是产品的主要价格,但用户可以选择折扣。我知道用户已经登录到系统,所以我有一个包含他的折扣的varbele,例如1.20(= 20%)。

在查询被触发后,我可以做一个foreach并在发送到视图之前重新计算价格,但由于查询构建器功能,我怀疑在解雇查询之前我可以在那里执行。

下面是对输入名称进行搜索的示例。现场价格现在是标准价格,但应该用折扣重新计算。这可能是一个游艇示例:

$price = round((($price/$User->discount)-$shipping),2);

SearchController:

public function search()
{

    if ($this->request->is('post')) {
        //$this->request->data);


    $options = array();
    $options['query'] = $this->request->data['Search']['query'];

    $products = TableRegistry::get('Products');
    $query = $products->find('search', $options);
    $number = $query->count();
    $products = $query->All();

    $this->set(compact('products'));
    $this->set('number_of_results',$number);

    }

产品表:

    public function findSearch(Query $query, array $options)
{
    $query
      ->where([
        'name LIKE' => '%'.$options['query'].'%',
        "active" => 1
      ])

      ->contain(['ProductsImages'])
      ->select(['id','name','price','delivery_time','ProductsImages.image_url'])
      ;
    return $query;
}

有没有办法在查询构建器中实现此重新计算?我试图在网上找到一些信息,但关于ORM选项的信息还不多。我想的可能是 - >结合。希望有人想让我朝着正确的方向前进。

先谢谢。

将控制器功能更改为:

public function search()
{

    if ($this->request->is('post')) {

    $options = array();
    $options['query'] = $this->request->data['Search']['query'];
    $discount = 2;

    $products = TableRegistry::get('Products');

    $query = $products
    ->find('search', $options);

    $query->formatResults(function (\Cake\Datasource\ResultSetInterface $products) {
        return $products->map(function ($row) {
            $row['price'] = ($row['price'] + 10);
            return $row;
        });
    });
    $number = $query->count();
    $products = $query->All();

    $this->set(compact('products'));
    $this->set('number_of_results',$number);

    }
}

0 个答案:

没有答案