【问题标题】:Laravel 5 - using dynamic properties in viewLaravel 5 - 在视图中使用动态属性
【发布时间】:2015-03-31 14:17:17
【问题描述】:

我的模型中有一个dynamic property user

class Training extends Model
{
    ...

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

我可以像这样在控制器中轻松获取用户名:

Training::find(1)->user->name

但我不知道如何在视图中执行相同的操作。我试过这个:

控制器:

return view('training/single', Training::find(1));

查看:

{{ $user->name }};

但没有成功,我收到错误Undefined variable: user。所以看起来我无法访问视图中的动态属性。

知道如何在视图中使用动态属性吗?

【问题讨论】:

    标签: php laravel eloquent laravel-5 dynamic-properties


    【解决方案1】:

    我担心这是不可能的。无法将视图中的 $this 上下文设置为模型。您可以使用 toArray() 将模型转换为数组,但这将包括相关模型,并且您必须使用 $user['name'] 访问它。

    我个人只会明确声明用户变量:

    $training = Training::find(1);
    return view('training/single', ['training' => $training, 'user' => $training->user]);
    

    【讨论】:

    • 不幸的是,我的问题并不清楚。您可以将键值或对象数组传递给查看。所以我传递了具有动态属性user 的对象Training。例如,使用问题中的代码,我可以访问user_id 属性,但无法访问动态属性user
    • 嗯。我担心那是不可能的。您可以将模型转换为数组,但这将包括相关模型。你不能只在你的视图中做$training->user->name 或者明确地传递用户['user' => Training::find(1)->user]
    • 是的,在视图中使用动态属性似乎是不可能的。此代码 ['training' => Training::find(1), 'user' => Training::find(1)->user] 按预期工作。
    • 您能否编辑您的答案,以便我可以接受更多读者?
    • 答案已编辑。另请注意,调用find(1) 两次将运行相同的数据库查询两次。而是将其存储在我的答案中的变量中;)
    【解决方案2】:

    使用eager loading

    return view('training/single', Training::with('user')->find(1));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多