В вашем ресурсе:
$return = parent::toArray($request);
unset($return['email']);
return $return;
Или, вы можете явно определить, что именно вы делаете хотите вернуть, вместо того чтобы полагаться на toArray
:
return [
'id' => $this->id,
'message' => $this->message,
// and so on...
];
Это дает вам больший контроль над окончательным ответом API, особенно если вы вносите изменения в базу данных / модель, но хотите, чтобы API оставался неизменным.
Похоже, что Вы хотите сделать виртуальное наследование. Оказывается ли это, на самом деле хорошая идея, другой вопрос, но здесь, как Вы делаете это:
class AbsBase {...};
class AbsInit: public virtual AbsBase {...};
class AbsWork: public virtual AbsBase {...};
class NotAbsTotal: public AbsInit, public AbsWork {...};
В основном, значение по умолчанию, невиртуальное множественное наследование будет включать копию каждый базовый класс в производном классе и включает все их методы. Поэтому у Вас есть две копии AbsBase - и причина, Ваше использование метода неоднозначно, оба наборы методов, загружаются, таким образом, C++ не имеет никакого способа знать который копия к доступу!
Виртуальное наследование уплотняет все ссылки на виртуальный базовый класс в один datastructure. Это должно сделать методы из базового класса однозначными снова. Однако отметьте: если существуют дополнительные данные в двух промежуточных классах, может быть некоторое маленькое дополнительное время выполнения наверху, чтобы позволить коду найти общий виртуальный базовый класс.
Вы должны для объявления наследования как виртуального:
struct AbsBase {
virtual void init() = 0;
virtual void work() = 0;
};
struct AbsInit : virtual public AbsBase {
void init() { }
};
struct AbsWork : virtual public AbsBase {
void work() { }
};
struct NotAbsTotal : virtual public AbsInit, virtual public AbsWork {
};
void f(NotAbsTotal *p)
{
p->init();
}
NotAbsTotal x;
Это может быть сделано, хотя это дает больше всего дрожь.
необходимо использовать "виртуальное наследование", синтаксис, для которого что-то как
class AbsInit: public virtual AbsBase {...};
class AbsWork: public virtual AbsBase {...};
class NotAbsTotal: public AbsInit, public AbsWork {...};
Тогда, необходимо определить, какую функцию Вы хотите использовать:
NotAbsTotal::work()
{
AbsInit::work_impl();
}
(ОБНОВЛЕННЫЙ с правильным синтаксисом)
Необходимо начать думать в терминах того, что Вы пытаетесь смоделировать здесь.
Общедоступное наследование должно только когда-либо использоваться для моделирования "isa" отношений, например, собака является животным, квадрат является формой, и т.д.
Взглянули на книгу Scott Meyer Эффективный C++ для превосходного эссе о том, что различные аспекты дизайна OO должны только когда-либо интерпретироваться как.
Редактирование: Я забыл говорить, что, в то время как ответы, до сих пор предоставленные, технически корректны, я не думаю, что любой из них решает проблемы того, что Вы пытаетесь смоделировать, и это - затруднение Вашей проблемы!
аплодисменты HTH
,
Rob