I think it's because a mistake here:
foreach($page_parses as $page_parse){
if($page_parse->price != $xpath->query($page->parser->xpath_price)->item(0) or $page_parse->stock != $xpath->query($page->parser->xpath_stock)->item(0)) {
$this->updateParse($page, $price, $stock, $page_parse);
}else{
You iterate all of parsed pages every time a new page is parsed and compare different links to each other. For example consider your first link is parsed, and you have it in db. Next when you parse the second page, you compare second page date with first one and actually they are different. So you edit every item even page_id. That will change first record in database.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…