在 phalcon 中可以多高效地编写此控制器操作?

How efficiently this controller action can be written more in phalcon?

我正在尝试从两个相互关联的 table 中删除数据,但我想知道如何在 phalcon 中更有效地写入数据,因为我现在正在通过正常方式进行操作PHP循环法。

动作代码如下:

  public function deletepollAction($pollId)
    {

        $poll = new Polls();
        $data = $poll->findFirst($pollId);
        $data->delete();
        $options = PollsOptions::find();
        foreach ($options as $singleoption) {
        if ($singleoption->polls_id == $pollId) 
        {
        $option = new PollsOptions();
        $data = $option->findFirst($singleoption->id);
        $data->delete();
        }
        }
        $this->response->redirect("/poll");
    }

我想知道在 phalcon 模型方法等中执行此操作的简洁、高效且简单的方法吗?

注意: 如您所见,它可以正常工作,但问题是它扰乱了我的执行速度,即(网页的性能从一秒钟内加载到执行操作然后重定向回页面更像是 2 秒),正如我所说,或者更可能从 500 毫秒到 1000 毫秒等等,我不想要。我想保持快速并在不使用循环的情况下解决这个问题,循环又循环遍历与父记录无关的记录,这太浪费时间了。 我的意思是我想严格地从子 table 获取所有关联记录并直接删除这些记录而不影响性能(时间)。

public function deletepollAction($pollId)
{
    $data = Polls::findFirst($pollId);
    $data->delete();
    $options = PollsOptions::find([
        'polls_id = :pollsId:',
        'bind' => [
            'pollsId' => $pollId
        ]
    ]);
    $options->delete();
    $this->response->redirect("/poll");
}

不确定为什么找到这个 PollsOptions 一次然后又找到它们并删除?这没有意义。也最好在数据库中设置级联删除 PollsOptionsPolls 被删除时你将只有:

public function deletepollAction($pollId)
{
    $data = Polls::findFirst($pollId);
    $data->delete();
    $this->response->redirect("/poll");
}

您可以在模型中创建关系 class。然后您可以设置级联操作以自动删除相关记录。

正在创建关系并设置级联设置

class Polls extends \Phalcon\Mvc\Model
{
    public function initialize()
    {
        $this->hasMany(
            'id',
            'PollsOptions',
            'polls_id',
            [
                'foreignKey' => [
                    'action' => \Phalcon\Mvc\Model\Relation::ACTION_CASCADE
                ]
            ]
        );
    }
}

正在更新控制器

除了删除投票记录外,您无需再执行任何操作。

public function deletepollAction($pollId)
{
    $poll = new Polls();
    $data = $poll->findFirst($pollId);
    $data->delete();
    $this->response->redirect("/poll");
}

在此处阅读并了解更多相关信息:

https://docs.phalconphp.com/en/3.2/db-models-relationships#cascade-restrict-actions