无法让Laravel的关系工作,新手

时间:2014-11-24 20:04:53

标签: php join laravel eloquent

我2天前开始学习。我已经建立了一个简单的用户登录和博客发布系统。

这是我的代码,它将获取所有博客帖子,但也应该一起加入表格

public function index()
{
    $blog = new Blog;

    $view = View::make('blogs.index');
    $view->posts = $blog->get()->user;

    return $view;
}

这是对的吗?查看文档和搜索,似乎是正确的但我不断收到以下错误:

未定义的属性:Illuminate \ Database \ Eloquent \ Collection :: $ user

我的博客表格如下: enter image description here

和用户表一样 enter image description here

博客模型

class Blog extends Eloquent {

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

用户模型

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');


    public function blog()
    {
        return $this->hasMany('Blog', 'id', 'user_id');
    }
}

2 个答案:

答案 0 :(得分:1)

index()函数中试试这个

public function index()
{
     $posts = Blog::all();

     return View::make('blogs.index', array('posts' => $posts));
}

然后在blogs.index中,您可以通过(刀片)

访问该关系

{{ $posts->user->id }}{{ $posts->user->email }}或数据库中的任何列

答案 1 :(得分:0)

使用$blog = new Blog;,您将开始创建新的博客条目。您真正需要做的是查询博客表并获取用户,这可以通过急切加载轻松完成。试试这个......

$blogs = Blog::with('users');

然后,当您创建视图时,您希望使用以下内容在视图中发送博客... with()方法的第一个参数是您要在视图中提供变量的名称第二个是要发送的实际变量。

return View::make('blogs.index')->with('blogs', $blogs);