【问题标题】:Laravel eloquent ORM beginnerLaravel 雄辩的 ORM 初学者
【发布时间】:2014-01-10 15:24:05
【问题描述】:

我尝试提出一个简单的请求。 假设登录用户有“项目”。 并假设“项目”有很多“评论”。

我尝试从用户那里获取所有项目的所有评论。

我有一个名为“users”、“projects”、“cmets”的表。 用户由 Sentry 管理。

我有两个模型:项目和评论:

class Project extends Eloquent { ... }
class Comment extends Eloquent { ... }

在我的模型“项目”中,我有这个:

public function comments()
{
    return $this->hasMany('Comment');
}

在我的控制器中我有这个

$projects = Project::comments()->paginate(10);

而且...不起作用。 以最好的方式,我想要这样的东西

$projects = Project::comments()->where('projects.account_id', '=', Sentry::getUser()->id)->paginate(10);

你能帮帮我吗?

编辑

好的,现在,我修改了这样的模型

用户模型:

public function project()
{
    return $this->hasMany('Project');
}

项目模型:

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

评论模型:

public function project()
{
    return $this->belongsToMany('Projects');
}

在我的控制器中:

$projects = User::with( array('project', 'project.comments') )->find( Sentry::getUser()->id );

并且 Laravel 在我的刀片循环中说“尝试获取非对象的属性”:

@foreach ($projects as $project)
    {{ $project->slug }}
@endforeach

几乎..

编辑

好的,工作正常。我修改了我的观点,没关系。 谢谢大家

【问题讨论】:

    标签: orm laravel eloquent


    【解决方案1】:

    如果您想要一个用户的所有项目,以及该项目上的所有 cmets,您需要这样做:User::with(array('projects', 'projects.comments'))->find(Sentry::getUser()->id);

    这将抓住当前用户,急切地加载与该项目相关的所有项目和项目 cmets!

    【讨论】:

    • 对我不起作用,Laravel 说:调用未定义的方法 Illuminate\Database\Query\Builder::hasManyThrough()
    • 项目没有 user_id 而是 account_id。是为了那个?
    • 你的关系没有正确建立。您需要先确保正确设置雄辩的关系。
    • 这看起来更像是 laravel 版本不适合他正在尝试做的事情。 hasManyThrough 是 Laravel 4.1 的新手,你确定你使用的是 4.1 吗?
    • 是的,当然。 @bgallagh3r 我已经解决了这个问题,现在项目有 user_id 并且没有效果。废话。
    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2014-04-14
    • 2016-02-26
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多