Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NFR]: How to perform batch modification operations without querying and iterate through modifications #16664

Open
tingleiwuyan opened this issue Nov 12, 2024 · 1 comment
Labels
new feature request Planned Feature or New Feature Request

Comments

@tingleiwuyan
Copy link

tingleiwuyan commented Nov 12, 2024

How to perform batch modification operations without querying and iterate through modifications

According to the document:

An UPDATE statement performs the update in two phases:

  1. Retrieval: If the UPDATE has a WHERE clause, it retrieves all the objects that match these criteria.
  2. Update: Based on the queried objects, it updates the requested attributes and stores them in the database.

This way of operation allows events, virtual foreign keys, and validations to be executed during the updating process. In short, the code:

<?php

$phql = "
    UPDATE Invoices
    SET
        inv_status_flag = 0,
        inv_total = 0
    WHERE
        inv_cst_id > 10";

$result = $this
    ->modelsManager
    ->executeQuery($phql)
;

if (false === $result->success()) {
    $messages = $result->getMessages();

    foreach ($messages as $message) {
        echo $message->getMessage();
    }
}

is somewhat equivalent to:

<?php

use MyApp\Models\Invoices;

$messages = [];
$invoices = Invoices::find(
    [
        'conditions' => 'inc_cst_id = :customerId:',
        'bind'       => [
            'customerId' => 10,
        ],
    ]  
);

foreach ($invoices as $invoice) {
    $invoice->inv_status_flag = 0;
    $invoice->inv_total       = 0;

    $result = $invoice->save();
    if (false === $result) {
        $messages[] = $invoice->getMessages();
    } 
}

For more details, you can refer to the Phalcon documentation.

@tingleiwuyan tingleiwuyan added the new feature request Planned Feature or New Feature Request label Nov 12, 2024
@raicabogdan
Copy link

If you know the queries you're making and want to bypass those checks, then you can run a native query instead
https://docs.phalcon.io/5.8/db-layer/#update

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new feature request Planned Feature or New Feature Request
Projects
None yet
Development

No branches or pull requests

2 participants