如果他有孩子,请停止更新父母

时间:2018-06-19 12:12:28

标签: php pdo

我有这样的列表

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;
  }
}

1 个答案:

答案 0 :(得分:1)

以下查询将返回层次结构中可可(拉米,罗伊)以下的所有子级。

$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.');
    }
}

注意::在这里我并不完全了解表结构。因此,仅给出一个一般示例。

  

更新查询

$statment = $this->db->prepare("UPDATE person SET parent = :parentId WHERE id = :childId");
$statment->execute([":parentId" => $parentId, ":childId" => $childId]);
$result = $statment->rowCount();