Php 在phalcon中编写控制器操作的效率如何?
我正试图从两个相互关联的表中删除数据,但我想知道如何在phalcon中更有效地编写数据,因为我现在正在通过普通的PHP循环方法来编写 以下是操作代码: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
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文档以了解删除触发器创建后的情况。这也是一种更好的方法。谢谢您的回答!这也是一种更好的方法。谢谢您的回答。!