Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在phalcon中编写控制器操作的效率如何?_Php_Phalcon_Phalcon Orm - Fatal编程技术网

Php 在phalcon中编写控制器操作的效率如何?

Php 在phalcon中编写控制器操作的效率如何?,php,phalcon,phalcon-orm,Php,Phalcon,Phalcon Orm,我正试图从两个相互关联的表中删除数据,但我想知道如何在phalcon中更有效地编写数据,因为我现在正在通过普通的PHP循环方法来编写 以下是操作代码: public function deletepollAction($pollId) { $poll = new Polls(); $data = $poll->findFirst($pollId); $data->delete(); $options = P

我正试图从两个相互关联的表中删除数据,但我想知道如何在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毫秒等等,我不希望这样。我希望保持较快的速度,并且在不使用循环的情况下解决此问题,循环反过来迭代与父记录无关的记录,这会浪费时间。 我的意思是,我希望严格地从子表中获取所有相关记录,并在不影响性能(次数)的情况下直接删除这些记录

不知道为什么您只找到一次此
轮询
,然后又找到它们进行删除?这没有道理。另外,最好在数据库中设置为级联删除
PollsOptions
,当
Polls
被删除时,您将只有:

public function deletepollAction($pollId)
{
    $data = Polls::findFirst($pollId);
    $data->delete();
    $this->response->redirect("/poll");
}
不知道为什么您只找到一次此
轮询
,然后又找到它们进行删除?这没有道理。另外,最好在数据库中设置为级联删除
PollsOptions
,当
Polls
被删除时,您将只有:

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

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

创建关系并设置级联设置

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");
}
请在此处阅读并了解更多信息:


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

创建关系并设置级联设置

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");
}
请在此处阅读并了解更多信息:


这个问题可能更适合@RobbieAverill:谢谢你的建议,我不知道代码审查,如果我认为我可能很快就能在这里得到答案,这是真的吗?你可以,但除非你的代码有问题,否则这个问题可能会以“离题”的形式结束您应该使用mysql触发器从第二个表中删除相关的表行。检查mysql文档中是否有删除后的触发器创建。这个问题可能更适合@RobbieAverill:谢谢你的建议,我不知道代码审查,如果我认为我可以在这里比那里很快得到答案,这是真的吗?你可以这样做,但除非你的代码有问题,否则这个问题也可能会结束“主题外”您应该使用mysql触发器从第二个表中删除相关的表行。请检查mysql文档以了解删除触发器创建后的情况。这也是一种更好的方法。谢谢您的回答!这也是一种更好的方法。谢谢您的回答。!