【问题标题】:How to dynamically set a parent table when accessing a collection?访问集合时如何动态设置父表?
【发布时间】:2021-06-13 02:57:41
【问题描述】:

我正在尝试根据登录的用户动态从不同的表中获取数据,如果允许他编辑所述表,我认为可行的是:

$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不是一个对象,所以它可能是一个数组/集合甚至是空的。你能dd($colaboradores->Niveis);dd($colaboradores->Niveis->$string); 用结果更新问题吗?
  • 查看dd($colaboradores->Niveis->$string),您可以检查它是否为空。因此,如果您尝试获取$colaboradores->Niveis->$string->id,则与您尝试从空变量获取属性相同。尝试打印dd($string) 并检查它是否是 Niveis 的属性或是否触发了关系。可能没有,也许这就是问题所在。
  • @Laerte 你是对的,我得到的字符串是输入错误的,当我输入 dd($colaboradores->Niveis->$string) 时,它现在带有一个集合。但是现在每当我真正尝试获取一个 id 时,dd($colaboradores->Niveis->$string->id) 它就会说Property [id] does not exist on this collection instance.

标签: php laravel laravel-livewire


【解决方案1】:

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

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

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

如果$obj 不是真实对象,这可能会导致问题,因此您可以通过以下方式进行检查:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 2022-01-05
    • 2012-01-03
    相关资源
    最近更新 更多