给定一个名为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();
}
}
所以,让我们说这些“有趣”的交易经常被使用 - 我应该从交易模型中返回多个交易吗?如果没有,该代码应该在哪里生效?
答案 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
个实例。
希望这有帮助。