未定义的偏移量0:Laravel

时间:2016-09-29 13:32:02

标签: php laravel

我已经阅读了有关stackoverflow的其他类似问题,但没有一个能帮助我找到解决方案。

这已经完全混淆了,曾经工作的东西随机破碎了,我不知道什么是错的,这个错误对我来说似乎不合逻辑我会告诉你我的意思。

public function nGetOverviewAccounts()
    {
    $results = Account::where('archive', '=', false)->select('id', 'display_name', 'server_ip_address', 'server_password', 'status_type_id', 'account_type_id')->get()->toArray();

    $index = 0;
    $accounts = [];

    foreach($results as $result)
    {
        $accountType  = AccountType::where('id', $result['account_type_id'])->select('name')->get()->toArray();
        $statusType   = StatusType::where('id', $result['status_type_id'])->select('name')->get()->toArray();

        return $accountType[0]['name']; //this works

        $accounts[$index]['account_type'] = $accountType[0]['name']; //this doesnt..

        $accounts[$index]['status_type']  = $statusType[0]['name'];

        $index++;
    }

    return $accounts;
}

该代码在函数中彼此相邻。数组$accountType看起来像这样。

0:{name: "Google"}

这表明它的索引为0但不起作用。

编辑:请仔细阅读

我要清除一些东西我似乎把它错误地交给了你们,返回语句是我添加的,因为我得到了未定义的索引错误我只将它添加到代码中以表明它在我返回时有效但是当我尝试将其值分配给另一个变量(没有return语句)时,我得到了未定义的索引错误。

2 个答案:

答案 0 :(得分:2)

试试这个:

public function nGetOverviewAccounts()
{
$results = Account::where('archive', '=', false)->select('id', 'display_name', 'server_ip_address', 'server_password', 'status_type_id', 'account_type_id')->get()->toArray();

$accounts = [];

foreach($results as $key => $result)
{
    $accountType  = AccountType::where('id', $result['account_type_id'])->select('name')->get()->toArray();
    $statusType   = StatusType::where('id', $result['status_type_id'])->select('name')->get()->toArray();

    if(!empty( $accountType[0]['name'])) && !empty( $statusType[0]['name'])){
    $accounts[$key]['account_type'] = $accountType[0]['name']; //this doesnt..

    $accounts[$key]['status_type']  = $statusType[0]['name']; 
  }
}

return $accounts;
}

此外,如果您想要$accountType$statusType的第一个键,则可以使用first()代替get()。如果您的密钥不同,则可以使用$index

答案 1 :(得分:1)

添加一些检查从不会伤害任何人:

public function nGetOverviewAccounts() {
    $results = Account::where('archive', '=', false)->select('id', 'display_name', 'server_ip_address', 'server_password', 'status_type_id', 'account_type_id')->get()->toArray();

    $index = 0;
    $accounts = [];

    foreach($results as $result)
    {
        $accountType  = AccountType::where('id', $result['account_type_id'])->select('name')->get()->toArray();
        $statusType   = StatusType::where('id', $result['status_type_id'])->select('name')->get()->toArray();


        $accounts[$index]['account_type'] = (isset($accountType[0]) && isset($accountType[0]['name'])?$accountType[0]['name']:"Unknown";

        $accounts[$index]['status_type']  = (isset($statusType[0]) && isset($statusType[0]['name'])?$statusType[0]['name']:"Unknown";

        $index++;
    }

    return $accounts;
}

问题是你的“调试”代码只检查它是否适用于循环的第一次迭代,它可能仍然没有用于第N个元素。

但是,如果这确实解决了您的问题,则下一个问题是为什么有与无效帐户类型ID相关联的帐户。这可能是一个更大问题的症状。