【问题标题】:Trouble retrieving data laravel4(oneToMany)无法检索数据 laravel4(oneToMany)
【发布时间】:2014-07-12 03:05:51
【问题描述】:

好的,所以我刚开始学习 Laravel,它很棒。我只是被困在试图从用户那里检索所有帖子。这是我的代码

模型/User.php

public function posts()
{
    $this->hasMany('Post');
}

模型/Post.php

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

控制器/UserController.php

public function getUserProfile($username)
{
    $user = User::where('username', '=', $username)->first();
    $this->layout->content = View::make('user.index', array('user'=>$user));
}

views/user/index.blade.php

<div class="show-post">
        <ul>
            <li>{{ $user->posts }}</lo>
        </ul>
    </div>

我也试过了:

@foreach($user->posts as $post)
     <li>{{$post->post}}</li>
@endforeach

所以我无法为每个特定用户显示帖子。谢谢。

【问题讨论】:

  • 请分享表格架构

标签: php mysql database orm laravel


【解决方案1】:

实际上$user-&gt;posts 返回一个Post 模型的集合,所以当你尝试这个时

{{ $user->posts }}

Laravel 尝试回显该集合对象,这是不可能的。你可以试试foreach循环:

@foreach($user->posts as $post)
    {{ $post->somepropertyname }}
@endforeach

也可以这样做:

// Get first post->somepropertyname
{{ $user->posts->first()->somepropertyname }}

// Get last post->somepropertyname
{{ $user->posts->last()->somepropertyname }}

// Get first post->somepropertyname (same as first)
{{ $user->posts->get(0)->somepropertyname }}

// Get second post->somepropertyname from collection
{{ $user->posts->get(1)->somepropertyname }}

// Get the post->somepropertyname by id (post id) 2
{{ $user->posts->find(2)->somepropertyname }}

你也可以像这样使用急切加载(更好):

$user = User::with('posts')->where('username', '=', $username)->first();

您可能会喜欢this article 关于Cocllection。

更新:也在模型方法中使用return,例如:

public function posts()
{
    return $this->hasMany('Post');
}

【讨论】:

  • 谢谢你这篇文章非常方便,我一直在阅读文档,这很有帮助我不能给 ua 检查,因为它没有解决而且我是全新的,所以我什至不能投票给你但如果它让你感觉好些,你就帮了我哈哈
  • 怎么解决不了?如果您按照我的回答应该完成。你现在看到什么错误?
  • 在非对象上调用成员函数 addEagerConstraints()
  • 您使用过User::with('posts') 吗?尝试不使用它,但如果您按照说明声明关系,它应该可以工作。
  • 是的,我复制并粘贴了,然后在视图中添加了你的 foreach 循环
【解决方案2】:

所以在@WereWolf-Alpha 的帮助下,我能够解决它并使我的代码更好,如果你注意到我忘记返回我的关系函数。示例:

请注意我之前没有退回它

模型/Post.php

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

而且我查询数据库的方式效率低下,所以 Alpha 向我展示了 Eager Loading http://laravel.com/docs/eloquent#eager-loading

控制器示例

public function getUserProfile($username)
{
    $user = User::with('posts')->where('username', '=', $username)->first();
    $this->layout->content = View::make('user.index', array('user'=>$user));
}

最后是视图:

div class="show-post">
        @foreach($user->posts as $post)
            {{ $post->post }}
        @endforeach
</div>

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2013-11-16
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多