模型应该处理自身的多个价值吗?

时间:2013-11-21 17:13:35

标签: laravel laravel-4

给定一个名为transactions的表,我有一个类似的模型:

class Transaction extends Eloquent {
    // other methods including some scopes

    public static function getInteresting()
    {
        $data = Transaction::with('location', 'user', 'type')
        ->category(1)
        ->salesGroup(3)
        ->confirmed();

        return $data->get();
    }
}

所以,让我们说这些“有趣”的交易经常被使用 - 我应该从交易模型中返回多个交易吗?如果没有,该代码应该在哪里生效?

3 个答案:

答案 0 :(得分:1)

我不会添加这样的静态方法。我一直在使用Respositories这样的情况,其中有一些常见的数据库交互在几个地方使用。作为奖励,如果您以后需要更改数据源,则会抽象出复杂的数据逻辑。

我看到你也知道范围,所以你也可以创建一个范围并在其中包含所有上述内容。

public function scopeInteresting($query)
{
    $query->with('location', 'user', 'type')
        ->category(1)
        ->salesGroup(3)
        ->confirmed();
}

$transactions = Transaction::interesting()->get();

答案 1 :(得分:1)

我认为存储库也是放置代码的好方法。它们带来了很大的灵活性,并且可以与控制器分离模型。我使用它们为我的控制器提供两个db实现 - mongo和mysql。您可以创建自己的服务层,但您的代码与db有关,因此可以选择存储库。

答案 2 :(得分:1)

在我工作的地方,我们使用三层来解决这个问题。

Entity代表(显然)一个实体,例如交易。它包含对这些字段的字段和设置者。

DAO提供了访问数据库的方法,与特定实体相关。

BO提供了执行应用程序业务逻辑的方法。

所以,在你的情况下: DAO\Transaction将执行查询,并返回多个Entity\Transaction个实例。

希望这有帮助。