@phpcoder81

Как правильно наследовать и соединить классы?

Ребят, не могу разобраться.
У меня есть три класса.
1) User (методы: создание, обновление, удаление) в mysql для пользователей отдельная таблица.
2) Organisation (методы: создание, обновление, удаление) в mysql для организаций тоже отдельная таблица.
3) Invoice (счета) (методы: создание, обновление, удаление) в mysql для счетов отдельная таблица, но содержит id_user и id_org.

Получается, что у меня третий класс Invoice грохнется, если я переименую какой-то столбец в таблицах пользователи или организации.

Я неправильно выделил сущности, или в чем причина?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 2
AK-VoronM
@AK-VoronM
"Мало-мало программист"
У вас Invoice должен зависеть от объектов User и Organisation. Соответственно внутри Invoice вы работаете с параметрами переданных объектов.
$uid = $this->User->getId();
    $oid = $this->Organisation->getId();

Их нужно передать в конструкторе или отдельными методами. Код без комментов, ну уж очень не удобный тут редактор.
class Invoice
{
    protected $User;
    protected $Organisation;

    public function __construct(User $User = null, Organisation $Organisation = null)
    {
        if (!is_null($User)) {
            $this->setUser($User);
        }
        if (!is_null($Organisation)) {
            $this->setOrganisation($Organisation);
        }
    }
    public function setUser(User $User)
    {
        $this->User = $User;
    }
    public function setOrganisation(Organisation $Organisation)
    {
        $this->Organisation = $Organisation;
    }
}

Такой подход поможет вам получать дополнительные поля объектов User и Organisation и не переживать, что вы поменяете таблицу.
Ответ написан
Therapyx
@Therapyx
Data Science
А зачем Инвоису айди организации?
Юзер привязан к организации, счет привязан к юзеру. айди организации как foreign key должен быть у юзера, который пренадлежит какой-либо организации.
Конечно если ты взял счет как "association class", даже в этом случае почему должно что-то грохнуться? если ты сделаешь связь (забыл название, вроде каскад), то к примеру при переименовании организации, эти же операции должны апдейтнутся и в связующих операциях. Т.е. организация А, станет организаций Б как в столбце, где ты это переименовал, так же и в счетах и пользователях.
упд, а нет, все же каскад (on update cascade), значит еще что-то помню хД
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы