视图中的Eloquent关系输出,未定义的偏移0

时间:2014-03-25 14:39:10

标签: laravel eloquent

我目前正在编写laravel 4中的一个项目,我正在尝试回应一些雄辩的数据作为我正在构建的搜索功能的一部分。

现在,我的问题是:当我尝试从另一个表(主表与多对多关系)中获取一个值时,我不断收到一个错误,指出未定义的偏移0,虽然奇怪但是很奇怪是几分钟前相同的代码工作...(我添加了一些东西,然后ctrl + z'一直回到"工作"一个,现在让人联想到同样的错误)

Controller.php这样

public function getData()
    {

    $data = Routine::with('measurements')->get();


        return View::make('sok')
        ->with('title', 'Søk')
        ->with('data', $data);
    }

View.blade.php

@if(isset($data))
        <table>
            <tr>
                <td>ID</td>
                <td>Tittel</td>
                <td>Verdi</td>
                <td>Ansatt ID</td>
            </tr>
        @foreach ($data as $data)
            <tr>
                <td>{{ $data->id }}</td>
                <td>{{ $data->measurements[0]->title }}</td> //This be the one that errors
                <td>{{ $data->value }}</td>
                <td>{{ $data->emp_id }}</td>
            </tr>
        @endforeach
        </table>
    @endif

我目前不知所措,任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

在您看来:

@if(isset($data))
        <table>
            <tr>
                <td>ID</td>
                <td>Tittel</td>
                <td>Verdi</td>
                <td>Ansatt ID</td>
            </tr>
        @foreach ($data as $data)
            <tr>
                <td>{{ $data->id }}</td>
                <td>
                @if($data->measurements->count()>0)
                    {{ $data->measurements->first()->title }}
                @endif
                </td>
                <td>{{ $data->value }}</td>
                <td>{{ $data->emp_id }}</td>
            </tr>
        @endforeach
        </table>
    @endif

答案 1 :(得分:0)

我有一个非常相似的错误。该错误消息根本没有用。我的问题结果是一个错字,因为我忘记将参数传递给我的'where'函数,即

$event = $this->events->make()->whereSlug()->first();

所以最重要的是,用精细的牙齿检查你的查询并检查它是否肯定在检查记录之前检索记录。

答案 2 :(得分:-1)

measurements将是一个集合,而不是一个数组,因此尝试使用$data->measurements[0]->title获取它的第一个值将无效。

相反,请尝试$data->measurements->first()->title

编辑:经过一些测试后,无论哪种方式都可以。

在没有可用数据的情况下使用$data->measurements()->first()->title;将导致Trying to get property of non-object

使用$data->measurements[0]->title;会产生Undefined offset: 0

看起来您使用的数据无效。您可能需要手动检查数据库以确保其中有数据并且数据有意义。

clod's答案应该有效。如果您希望始终有结果,最好使用has()而不是where()