Php 如果父对象有子对象,则停止更新父对象

Php 如果父对象有子对象,则停止更新父对象,php,pdo,Php,Pdo,我有这样的清单 John Jack Husam Koko Rami Loay 我有这个功能,允许我改变孩子的父亲,在我的情况下,我可以改变Koko,让他成为Loay的孩子 我想阻止这一切,因为他有孩子,我如何验证这个案例,以检查他是否有孩子,然后不能改变它,如果他没有孩子,那么我可以改变他的父亲 这是我的职责 public function updateParentId($parentId, $childId) { $statment

我有这样的清单

John
   Jack
       Husam
   Koko
       Rami
       Loay
我有这个功能,允许我改变孩子的父亲,在我的情况下,我可以改变Koko,让他成为Loay的孩子

我想阻止这一切,因为他有孩子,我如何验证这个案例,以检查他是否有孩子,然后不能改变它,如果他没有孩子,那么我可以改变他的父亲

这是我的职责

public function updateParentId($parentId, $childId)
{
  $statment = $this->db->prepare("UPDATE person SET parent = $parentId WHERE id = $childId");
  $statment->execute();
  $result = $statment->rowCount();
  if($result == "1")
  {
       $message = '<label>successfully</label>';
  }
  else
    {
       $message = '<label>Wrong</label>';
    }
   echo $message;
  }
}
公共函数updateParentId($parentId,$childId)
{
$statment=$this->db->prepare(“更新个人设置父项=$parentId,其中id=$childId”);
$station->execute();
$result=$station->rowCount();
如果($result==“1”)
{
$message='成功';
}
其他的
{
$message='错误';
}
回声$信息;
}
}

以下查询将返回层次结构中Koko(Rami,Loay)下面的所有子项

$statment = $this->db->prepare('SELECT id, parent FROM (SELECT * FROM person ORDER BY parent, id) sorted, (SELECT @id:=:id) temp WHERE (FIND_IN_SET(parent, @id) > 0 || id = "Loay") AND @id:=CONCAT(@id, ",", id)');
$statment->execute();
$parents = $statment->fetchAll();
foreach ($parents as $value) {
    if ($value['id'] == "Loay") {
        throw new \Exception('Person can not be moved to its children.');
    }
}
注意:这里我不完全了解表的结构。所以,我们只举一个一般的例子

更新查询


你试图验证什么?你既没有提供这样的代码,也没有更新呼叫,所以帮助真的很困难。首先你是否理解我的问题@NicoHaase?,然后请解释你的问题是什么。我可以将Loay的父亲更改为John,例如,我如何检查Loay是否有孩子??如果他有孩子,我想阻止改变他的父亲,如果他没有孩子,我想允许改变他的父亲@NicoHaaseWe只有很少的信息,但有两个想法:1/在数据库中添加一个信息,例如
has_child
这是真是假,所以在改变之前,你要检查
has_child
是否正确:是,没有改变,否则你就改变。2/只需检查您是否能找到孩子,如果是没有更改,否则更改此代码仅阻止我将父亲移动到其孩子?或者,如果他有孩子,我不能将其移动到树中的任何名称?您应该使用
id
而不是孩子的名称(如此处使用的Loay),这对于每个
人来说都是唯一的,即使许多人的名称相同,也不会有冲突。他给了我以下警告:PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:在/var中未绑定任何参数…他指示$station->execute();
$statment = $this->db->prepare("UPDATE person SET parent = :parentId WHERE id = :childId");
$statment->execute([":parentId" => $parentId, ":childId" => $childId]);
$result = $statment->rowCount();