访问集合时如何动态设置父级table?

How to dynamically set a parent table when accessing a collection?

我正在尝试从动态不同的 table 获取数据,具体取决于登录的用户以及是否允许他编辑 table,我认为可行的是这个:

$colaboradores = Colaboradore::where('email', '=', Auth::user()->email)->first();
$tables = DB::connection('mysql2')->select("SHOW TABLES LIKE 'intervencoes\_%'");
foreach ($tables as $object) {
    $arrays[] = (array)$object;
}
foreach ($arrays as $array) {
    $string = implode('', $array);
    $test = $colaboradores->Niveis->$string->id;
}

它在代码的最后一位输出错误说 "Trying to get property 'id' of non-object" 我一直在四处寻找几个小时,但找不到任何相关的东西。 顺便说一句,这都在 livewire 组件中。

提前致谢。

编辑:

dd($colaboradores->Niveis)

dd($colaboradores->Niveis->$string)

由于 $colaboradores->Niveis->$string returns 一个集合,您需要对其进行迭代以获得结果。

$test = [];
foreach ($colaboradores->Niveis->$string as $obj) {
    $test[] = $obj->id;
}

然后你可以检查$test中的ID,例如dd($test);

如果 $obj 不是真实对象,这可能会导致问题,因此您可以使用以下方法检查它:

if (!is_object($obj)) {
    //Do something - Not an object!
}