【问题标题】:Returning related field [Laravel 4]返回相关字段 [Laravel 4]
【发布时间】:2014-11-03 12:25:19
【问题描述】:

我有 2 个这样的模型:

class Task extends Eloquent {

    protected $guarded = ['id'];

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

class User extends Eloquent {

    protected $guarded = ['id'];

    public function task() {
        return $this->hasMany('Task');
    }
}

..还有一个如下所示的刀片索引部分:

@foreach ($tasks as $task)

    {{ "<tr><td>$task->user->fullname</td></tr>" }}

@endforeach

...但不是返回全名,而是返回整个 JSON 对象,例如...

{"id":9,"email":"FunkB@example.com","fullname":"Brycen Funk","created_at":"2014-09-09 16:40:31","updated_at":"2014-09-09 16:40:31"}->fullname

对我做错了什么有什么想法吗?我提前道歉,因为我确信答案是显而易见的,就在我眼前。

谢谢。

【问题讨论】:

  • 您能否编辑您的问题并为您的代码块(开头的模型和 JSON)添加正确的格式?这并不难,只需选择您的代码并单击编辑器工具栏中的{} 括号图标(或者,在您最喜欢的文本编辑器中将所有代码缩进 4 个空格,然后在此处复制/粘贴)。谢谢!
  • $task-&gt;user()-&gt;fullname 有影响吗?另外,您在收集任务时是否急于加载用户?
  • 我正在学习 laravel,所以不确定我是否正在实现预加载。但是,$task->user()->fullname 不起作用。

标签: php laravel-4 relationship blade belongs-to


【解决方案1】:

当您使用 Eloquent 从数据库中获取任务时,您是否渴望将用户连同它们一起加载?如果没有,要做到这一点,你只需要按照以下方式做一些事情:

$tasks = Task::with(['user'])->get();

或者您也可以在 foreach 循环中执行此操作:

@foreach ($tasks as $task)
<tr>
    <td>{{ $task->user()->fullname }}</td>
</tr>
@endforeach

【讨论】:

  • 用户的热切加载工作,我能够用用户信息回显$task。但是,仍然无法按照指示引用全名。
  • 如何在你的用户模型上设置protected $attributes = array('fullname'); 属性? @DanielDunning
  • 不幸的是,这并没有解决问题。还有其他想法吗?
  • 好吧,最后,我创建了一个用户数组,我用 tasks 数组传递给 View,并根据索引显示全名。我知道这不是最有效或最佳实践,但让我克服了困难。一旦我使用该软件变得更好,我将返回并实施更优雅的解决方案。
猜你喜欢
  • 2014-11-23
  • 1970-01-01
  • 2013-10-21
  • 2013-07-04
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
相关资源
最近更新 更多