如何防止在存储库中多次获取数据?

时间:2015-02-17 18:56:59

标签: laravel laravel-4

我的EloquentUserRepository(具体实现)有一些方法,例如getCompanies($userId)getProfile($userId)

在这两种情况下,在返回内容之前,他们会抓取用户,如下所示:

$user = User::find($userId);

因此,当我需要在同一个请求中调用这两个方法时,数据将被提取两次。

我错过了什么或者我错误地使用了存储库吗?

1 个答案:

答案 0 :(得分:0)

如果你从关系方面接近它会怎么样?我假设Companies住在不同的桌子上。你能用这样的东西收购这些公司吗?

<?php 

class User extends Model {

    protected $table = 'users';
    protected $fillable = ['name', 'email', 'avatar'];
    protected $hidden = ['password', 'remember_token'];

    public function companies()
    {
        return $this->hasMany('App\Company', 'user_id');
    }
}

然后你可以找到这些公司:

$user = User::find($userId)->load('companies')->get();

你已经加载了这些公司。

如果配置文件位于不同的表中,您可以执行类似的关系,如下所示:

<?php

class User extends Model {

    protected $table = 'users';
    protected $fillable = ['name', 'email', 'avatar'];
    protected $hidden = ['password', 'remember_token'];

    public function profile()
    {
         return $this->hasOne('App\Profile', 'user_id');
    }
}

我不确定这是否正是您所寻找的,但这是我喜欢在查找与特定型号相关的项目时使用的方法。