是的,有一种方法。这是好的设计吗?也许,也许不是。很难从你的简短描述中说出。
// Doctor model
public function __get($key)
{
// check deafult behaviour
if (is_null($value = parent::__get($key))) return $value;
// if null, let's try related user
return $this->user->__get($key);
}
public function __set($key, $value)
{
$user = $this->user;
// first try user
if (array_key_exists($key, $user->getAttributes()) || $user->hasSetMutator($key))
{
return $user->__set($key, $value);
}
// then default
parent::__set($key, $value);
}
这样,你可以这样做:
$doctor->name; // returns $doctor->user->name; unless you have accessors for name
$doctor->name = 'Some Name';
// then
$doctor->user->name; // 'Some Name';
// so finally push instead of save, in order to save related user too
$doctor->push();
记住,这是很简单的例子,为了简洁。有一个机会,Doctor
模型的现有属性是null
,因此不应该调用$this->user->__get()
,例如。所以为了使它完全可靠,你需要检查hasGetMutator()
,relations
等等。有关详细信息,请参阅Model
s __get
和__set
。
如果医生没有用户,你想在结果中看到那个医生吗? – user3158900 2014-09-04 20:16:28
医生总是与用户有关(至少在这种情况下)。请阅读“Matthew Rath”所做回答的评论。 – Mathius17 2014-09-04 20:22:54