首页 > 解决方案 > 如何在 phalcon 中获取具有最大列值的记录?

问题描述

我正在尝试获取具有最大faq_order列的行/记录。

场景:我有一个表faq_category,它包含一个字段faq_orderFAQ_ORDER列负责存储订单号。

faq_category我想设置新记录时,faq_order它应该具有最新的价值。即假设是否有 2 条先前的记录,以便记录的 faq_order 值分别为 1、2!现在在第三条新记录上,它应该将faq_order设置为 3,但我尝试了下面的代码,但没有找到合适的方法。

保存功能

public function saveGeneralFaqCategoryAction(){

    // Instantiate new form for EbFaqCategoryModel
    $form = new EbFaqCategoryForm();

    if( $form ->isValid($this->request->getPost())){

        // Get the FAQ Category id (if any)
        $id = $this->request->get( 'id', null );

        // Get existing FAQ Category (if any) or create a new one
        if( null !== $id && $id !== '' ) {

            $faqCategory = EbFaqCategoryModel::findFirst( $id );

        } else {
             // Here we create new instance and I'm stuck here!
            // Logic in my mind is get max order and +1 it and then save it 
            // in new instance
            $faqCategory = new EbFaqCategoryModel();
            //$maxOrder = EbFaqCategoryModel::get(); 
            $faqCategory->setFaqOrder(); // On new I want to set max value

        }
        // Bind form with post data
        $form->bind( $this->request->getPost(), $faqCategory );
        $faqCategory->save();
    } else {
        // Send error Json response
        return CxHelper::SendJsonError($form->getHtmlFormattedErrors());
    }

    // Return success
    return array( 'data' => 'Success' );
}

模型:

/**
 * Get Current Max Order
 *
 * @return array
*/
public static function getCurrentMaxOrder(){
    $queryBuilder = new Builder();

    return  $queryBuilder
        ->from(array('c' =>  static::class))
        ->columns('c.*')
        ->where('c.faq_order', MAX) // HERE I want to get a Record having faq_order max
        ->orderBy("c.date_created desc")
        ->getQuery()
        ->execute()->setHydrateMode(Resultset::HYDRATE_ARRAYS)
        ->toArray();
}

标签: phpsortingphalconphalcon-orm

解决方案


您应该使用 ORM 聚合函数:https ://docs.phalconphp.com/3.2/en/db-models#generating-calculations

这是一种方法:

function beforeValidationOnCreate()
{
    $this->faq_order = \YourModelClassame::maximum([
        'column' => 'faq_order'
    ]) + 1;
}

这样,当您从该表创建记录时,它将始终具有最高faq_order值:)


推荐阅读