我们团队使用 ORM 写了两个例子, 争论这两个例子的优缺点. 麻烦帮忙分析一下.
表结构: user: [ id, ]
car: [ id, user_id, car_status, ]
Laravel ORM 代码:
<?php
class User extends \Illuminate\Database\Eloquent\Model
{
// 例子 1: 将取用户所有车辆的方法写在 User 中, user ID 参数使用$this->id
// 例子 1 的理由是: 因为要取得用户的所属车辆, 出发点是 User 对象所以方法应该写在 User 中, 这样会更加面向对象.
public function myCars()
{
return Car::where(['user_id' => $this->id, 'car_status' => 1])->get();
}
}
class Car extends \Illuminate\Database\Eloquent\Model
{
// 例子 2: 将取用户所有车辆的方法写在 Car 中, user ID 参数使用通过方法传递进来
// 例子 2 的理由是: 因为所查询的是 Car 表, user ID 应该作为 Car 的一个属性传递给 Car.list 方法,而且$moreCondition 可以日后增加更多筛选条件复用性好.
public function list(int $userID, $moreCondition...)
{
return $this->where(['user_id' => $userID, $moreCondition...])->get();
}
}
例子 1: 将取用户所有车辆的方法写在 User 中, user ID 参数使用$this->id 例子 1 的理由是: 因为要取得用户的所属车辆, 出发点是 User 对象所以方法应该写在 User 中, 这样会更加面向对象.
例子 2: 将取用户所有车辆的方法写在 Car 中, user ID 参数使用通过方法传递进来 例子 2 的理由是: 因为所查询的是 Car 表, user ID 应该作为 Car 的一个属性传递给 Car.list 方法,而且$moreCondition 可以日后增加更多筛选条件复用性好.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.