我正在尝试检查我的Eloquent
模型以找出它们与其他模型的关系。问题是关系被简单地定义为单一方法并且不存在关系的中心索引:
public function posts()
{
return $this->hasMany('Post');
}
为了检查所有关系,我需要提取方法列表,取出继承自的方法Eloquent
,执行每个方法并检查返回类型:
$all = get_class_methods($model);
$inherited = get_class_methods('Eloquent');
$unique = array_diff($all, $inherited);
foreach($unique AS $method)
{
$relation = $model->$method();
if(is_a($relation, 'Illuminate\Database\Eloquent\Relations\Relation'))
{
//... this is a relation, do something with it
}
}
不用说,这是非常危险的。有没有办法以不同的、更安全的方式进行这种检查?