Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用点语法遍历laravel中的模型关系_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

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

Php 如何使用点语法遍历laravel中的模型关系,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我正在尝试遍历复杂的雄辩的模型关系/属性,我想使用一个简单的点结构来遍历它,类似于使用Arr::get() 例如: $data = [ 'foo' => [ 'bar' => [ 'key' => 'value' ] ] ]; $value = Arr::get($data, 'foo.bar.key'); // returns 'value' 我试过使用 $value = Arr::get($model, 'relation.subrel

我正在尝试遍历复杂的雄辩的模型关系/属性,我想使用一个简单的点结构来遍历它,类似于使用
Arr::get()

例如:

$data = [
  'foo' => [
    'bar' => [
      'key' => 'value'
    ]
  ]
];
$value = Arr::get($data, 'foo.bar.key'); // returns 'value'
我试过使用

$value = Arr::get($model, 'relation.subrelation.attribute')
然而,即使雄辩的模型支持ArrayAccess,该方法也会失败并始终返回null


laravel是否有一个简单的方法来实现这一点?

雄辩的模型返回一个与PHP中的数组不同的
集合。您可以使用
toArray()
函数将其转换为数组

$my_model->toArray();

这将为您提供一个数组。但是请记住,它也将主模型中的所有嵌套模型转换为一个数组。

对于所有想知道的人,我已经设法通过修改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;
}

因为关系可以是一对多,所以可以有一个带有数字索引的对象数组。检查这是否是问题所在。@anwerjunaid这些纯粹是一对一关系(子/父),但感谢您的建议,您是否将集合从模型查询更改为数组?您应该首先在集合中使用
->toArray()
。哦,我错过了这个功能。对许多人来说,结果可能只是返回数组