Как получить запись, имеющую максимальное значение столбца в phalcon? - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь получить строку / запись, имеющую столбец max faq_order.

Сценарий : у меня есть таблица faq_category, и она содержит поле faq_order. FAQ_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();
}

1 Ответ

0 голосов
/ 07 февраля 2019

Вы должны использовать функции агрегации 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 значение:)

...