Привет У меня есть дизайн базы данных
+-------------+--------------+-------+
| referral_id | referrent_id | level |
+-------------+--------------+-------+
В моей базе данных есть строки с данными, подобными этим:
+---+---+---+
| 1 | 1 | 0 |
+---+---+---+
| 1 | 2 | 1 |
+---+---+---+
| 1 | 3 | 1 |
+---+---+---+
| 1 | 4 | 1 |
+---+---+---+
| 2 | 2 | 0 |
+---+---+---+
| 3 | 3 | 0 |
+---+---+---+
| 4 | 4 | 0 |
+---+---+---+
В основном дерево
/ 2
1 - 3
\ 4
И я пытаюсь переместить 3, чтобы быть под 2
/ 2 - 3
1 - 4
Моя реализация:
public function changeReferrer(Member $newReferrer) {
$oldReferrer = $this->getReferrer(1); // this retrieves the ancestor one level up
DB::select('DELETE a FROM Referrer_Referent AS a
JOIN Referrer_Referent as d ON a.referent_id = d.referent_id
LEFT JOIN Referrer_Referent AS x
ON x.referrer_id = d.referrer_id AND x.referent_id = a.referrer_id
WHERE d.referrer_id = '.$oldReferrer->id.'
AND x.referrer_id IS NULL');
DB::select('INSERT into Referrer_Referent (referrer_id, referent_id, level)
SELECT supertree.referrer_id, subtree.referent_id, supertree.level + subtree.level + 1
FROM Referrer_Referent as supertree JOIN Referrer_Referent as subtree
WHERE subtree.referrer_id = '.$oldReferrer->id.'
AND supertree.referent_id = '.$newReferrer->id);
}
Так что я бы назвал свою функцию как $user3->changeReferrer($user2);
Но я получаю следующие ошибки:
Нарушение ограничения целостности: 1062 Повторяющаяся запись '1-1' для ключа 'PRIMARY' (SQL: INSERT в Referrer_Referent (referrer_id, referent_id, уровень) SELECT supertree.referrer_id, subtree.referent_id, supertree.level + subtree.level + 1 FROM Referrer_Referent в качестве супердерева JOIN Referrer_Referent в качестве поддерева WHERE subtree.referrer_id = 1 И supertree.referent_id = 2)
Прикрепление этого блога в качестве ссылки.