【问题标题】:Laravel Eloquent relationship not workingLaravel Eloquent 关系不起作用
【发布时间】:2018-09-12 19:46:43
【问题描述】:

我使用的是 laravel 5.4

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

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

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

我在 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 类的对象无法转换为字符串

【问题讨论】:

  • 首先将所有函数更改为模型名称以外的其他名称,然后使用 $list->function_name()->id
  • @Exprater 使用 $list->user->id 完全没问题,因为关系也会自动映射到属性。除非您需要从关系中获取方法,否则您将使用 user()->somemethod();

标签: php mysql web laravel-5


【解决方案1】:

你试过了吗

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

我认为函数应该总是以小写开头。

【讨论】:

    【解决方案2】:

    如果一个集合被转换为一个字符串,它将作为 JSON 返回:

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

    【讨论】:

      【解决方案3】:

      而不是下面的行:

      $list->User->id
      

      尝试:

      $list->User()->id
      

      在命名函数时始终使用驼峰式大小写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        相关资源
        最近更新 更多