【发布时间】:2015-01-26 23:07:31
【问题描述】:
图 1:这是一个示例模型类
class Games {
public $id = 0;
public $date = null;
public $player1_id = 0;
public $player2_id = 0;
public $score = null;
public function save(){
if(empty($this->id)){
// do INSERT here
}
else{
// do UPDATE here
}
}
}
图2:这是一个类的使用示例
// Save a new date to an existing game
$game = new Games;
$game->id = $input['id'];
$game->date = $input['date'];
$game->save();
如果基于figure2 执行UPDATE 查询,则player1_id、player2_id 和score 的值将被错误地覆盖为零/空值。因此,figure2 中的调用我需要一种从类内部确定某些属性未设置的方法,因此我可以动态地将 UPDATE 查询更改为仅更新数据库中的特定字段。还是我接近这个错误?
注意:我知道我可以使用单个 array 属性来保存所有字段(并使用 isset),但这感觉就像它打破了模型的重点,并且也非常特定于 PHP(在那个该解决方案不能很好地转移到其他语言,例如严格键入数组的 JAVA?)。我也意识到我可以做我认为 ORM 做的事情,并在执行更新之前进行初始 SELECT 查询(但这似乎非常低效!)
【问题讨论】:
-
愚蠢的问题 - 你为什么要在图 2 中创建一个新的 Games 对象?
-
哈哈!抱歉,让我更新一下……(忘记了
$game->save();电话) -
你是对的,ORM 可以为你做到这一点。我建议你看看这些,它们会为你节省大量编写和更新样板代码或调试白痴错误的时间。
-
ORM 不太适合我的项目。另请参阅有关 ORM 是否适用于复杂项目的精彩帖子:stackoverflow.com/questions/7765070/redbean-orm-performance
-
我确实使用类进行连接/准备/等。所有 DAL 的东西。
标签: php mysql oop dynamic-queries