如何使用点语法遍历laravel中的模型关系

Ben*_*owe 7 php laravel eloquent laravel-5

我试图遍历复杂的雄辩模型关系/属性,我想使用一个简单的点结构来迭代这个,类似于你如何遍历数组 Arr::get()

例:

$data = [
  'foo' => [
    'bar' => [
      'key' => 'value'
    ]
  ]
];
$value = Arr::get($data, 'foo.bar.key'); // returns 'value'
Run Code Online (Sandbox Code Playgroud)

我试过用了

$value = Arr::get($model, 'relation.subrelation.attribute')
Run Code Online (Sandbox Code Playgroud)

然而,即使雄辩的模型支持ArrayAccess,这也会失败并且aways返回null.

laravel有一个简单的方法来完成这个吗?

Ben*_*owe 6

对于所有想知道的人,我设法通过修改arr :: pull()函数来专门用于模型来找出解决方案:

public static function traverse($model, $key, $default = null)
{
    if (is_array($model)) {
        return Arr::get($model, $key, $default);
    }


    if (is_null($key)) {
        return $model;
    }

    if (isset($model[$key])) {
        return $model[$key];
    }

    foreach (explode('.', $key) as $segment) {
        try {
            $model = $model->$segment;
        } catch (\Exception $e) {
            return value($default);
        }
    }

    return $model;
}
Run Code Online (Sandbox Code Playgroud)