【问题标题】:Laravel: get name from table usersLaravel:从表用户获取名称
【发布时间】:2018-08-10 15:33:56
【问题描述】:

我需要获取用户表中的名称字段

我在控制器中的方法:

public function reviewsactivity()
{
    $activity = Activity::orderBy('id', 'DESC')->paginate();
    $users = User::orderBy('id', 'ASC')->pluck('id', 'name');
    return view('reviews.reviewsactivity', compact('activity', 'users'));
}

还有观点:

              @foreach($activity as $actividad)
                  <tr>
                      <td>{{ $actividad->description }}</td>
                      <td>{{ $actividad->subject_type }}</td>
                      <td>{{ $actividad->user->name }}</td>
                      <td>{{ $actividad->causer_type }}</td>
                      <td>{{ date('d-m-Y', strtotime($actividad->created_at)) }}</td>
                  </tr>
              @endforeach

Activity表中的字段:causer_id

我还有下一个日志:

 Trying to get property of non-object 
 (View: C:\laragon\www\tao\resources\views\reviews\reviewsactivity.blade.php)

【问题讨论】:

  • ActivityUser 模型之间有关系吗?
  • 为此使用关系。如果每个活动都有一个用户,则使用 belongsTo 关系。

标签: php laravel pluck


【解决方案1】:

假设您在activities 表中有user_id 引用users 表,那么您可以在Activity 模型中定义belongsTo 关系

活动模型

public function user(){
     return $this->belongsTo(User::class, 'user_id');
}

现在使用 with('user') 获取带有预加载的 Activity

public function reviewsactivity()
{
    $activity = Activity::with('user')->orderBy('id', 'DESC')->paginate();
    $users = User::orderBy('id', 'ASC')->pluck('id', 'name');
    return view('reviews.reviewsactivity', compact('activity', 'users'));
}

在此处检查 Eager Loading 文档https://laravel.com/docs/5.6/eloquent-relationships#eager-loading

【讨论】:

    【解决方案2】:

    你需要先检查activity是否有附加用户:

    <td>{{ !is_null($actividad->user)?$actividad->user->name:'' }}</td>
    

    否则,您尝试从非对象 null 获取属性 name,这就是您收到消息错误的原因。

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 2016-07-30
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多