在这里使用Laravel 5.1。我创建了两个类,一个扩展了另一个:
abstract class ActivityTimeline extends Model
:
$this->fields = [
'owner_id',
'contact_name',
'mailing_label',
'source_id',
'source_raw',
'initial_referer_raw',
'primary_person',
'connections',
];
foreach ($this->fields as $field) {
if (method_exists($this, $field)) {
dd('the method exists', $this, $field);
$timelineActivity[$field] = $this->{$field}();
}
}
和
class ContactActivity extends ActivityTimeline {
:
public function primary_person()
{
return $this->getPrimaryPerson($this->record);
}
add (' The method exists', $this, $field);"返回以下内容:
方法存在ContactActivity{#963▶}
"primary_person"
然而,当这个if语句通过时,我尝试调用刚才检查存在的方法,我得到:
Builder.php 2123行BadMethodCallException:调用未定义方法Illuminate'Database'Query'Builder::primary_person()
所以似乎我没有工作与一个ContactActivity对象在这里,即使dd显示我是。有人知道我在这里做错了什么,得到了错误的对象吗?
我认为这是因为你从父类调用了子方法。尝试添加
abstract function primary_person();
On ActivityTimeline类