Laravel Eloquent关系不起作用

时间:2017-07-18 10:37:51

标签: php mysql web laravel-5

我正在使用laravel 5.4

我有两种型号的用户模型和体验模型。我在User模型中创建了Experience方法,如下所示。

public function Experience() {
    return $this->hasMany('App\Experience', 'updatedbyuser_id');
}

这里updatedbyuser_id是外键,是数据库中experience表的一列。

我在体验模型中创建了另一个名为User的方法,如下所示。

public function User() {
    return $this->belongsTo('App\User');
}

我创建了一个控制器' PagesController'并将以下方法放在其中

public function returnExperience() {
    $lists = Experience::where(['deleted' => '0'])->get();
    return view('pages.experience', compact('lists'));
}

要查看returnExperience()方法返回的数据,我的视图页面包含以下代码

              @foreach($lists as $list)
                <tr>
                  <td>{{$list->min}}</td>
                  <td>{{$list->max}}</td>
                  <td>{{$list->grade}}</td>
                  <td>{{$list->User->id}}</td>
                  <td>{{$list->updated_at}}</td>
                  <td>Edit</td>
                </tr>
              @endforeach

但它在屏幕上返回以下错误消息

类Illuminate \ Database \ Eloquent \ Relations \ BelongsTo的对象无法转换为字符串

3 个答案:

答案 0 :(得分:0)

您尝试过

public function user() {
    return $this->belongsTo('App\User');
}

          @foreach($lists as $list)
            <tr>
              <td>{{$list->min}}</td>
              <td>{{$list->max}}</td>
              <td>{{$list->grade}}</td>
              <td>{{$list->user->id}}</td>
              <td>{{$list->updated_at}}</td>
              <td>Edit</td>
            </tr>
          @endforeach

我认为函数应始终以小写开头。

答案 1 :(得分:0)

如果将集合强制转换为字符串,则将其作为JSON返回:

public function returnExperience() {
    $lists = (string) Experience::where(['deleted' => '0'])->get();
    return view('pages.experience', compact('lists'));
}

答案 2 :(得分:0)

代替下面的行:

$list->User->id

尝试:

$list->User()->id

并且在命名函数时始终使用骆驼套。