我无法找到这个问题的答案。
我想将一个php对象保存到mysql数据库中。例如:
class user{
private $id, $email, $pw, $first, $last, $group,.....;
// getters and setters
}
class someclass{
public function someFunction(){
$pdo = new PDO(...);
$objUser = new user();
$objUser->setEmail(....);
$objUser->setFirst(....);
//bla bla bla
// and i want to save this user object to DB with something like:
$pdo->insert($objUser); //in this case db table equals to class name
//instead of building/writing query manually.
//for mysql_query i have made a class for building query for insert update delete
//but mysq_query is old and deprecated
}
}
我要求的主要原因是因为我不想写一些默认存在的东西。
谢谢。
答案 0 :(得分:5)
我可能会在user
类中实现insert,update和delete方法,而不是使它成为数据库类的一个特性来解释给它的对象。
在PHP或mysql PDO类中没有内置的方法,但是有些框架实现了ORM(对象关系映射),允许您在对象类中轻松指定它们与数据库的交互方式。 (Laravel framework ORM docs)
这是一种可以实现它的基本方法。
class ORM {
public function insert($pdo) {
// Get object name
// Get object properties
// Check if database table exists with object name
// Generate and run a query to insert a record into that table
// using the property names and values
}
public function update($pdo) {
// Like insert, but update
}
public function delete($pdo) {
// Etc...
}
}
class user extends ORM {
private $id, $email, $pw, $first, $last, $group,.....;
// getters and setters
}
class someclass{
public function someFunction(){
$pdo = new PDO(...);
$objUser = new user();
$objUser->setEmail(....);
$objUser->setFirst(....);
//bla bla bla
$objUser->insert($pdo);
}
}
答案 1 :(得分:0)
您可以使用Model类扩展模型类。
使用与MySQL表名称相同的属性名称。
在此类中,您可以创建一个 saveToDb($ tableName)方法(如果您将tableName定义为类属性,则可以省略它):
使用查询从MySQL表获取列
"DESCRIBE tablename"
从Class实例获取属性:
get_object_vars($this)
计算1和2之间的交集。(根据设置和数据库模型,从1中删除id列)。
现在为匹配列,您可以插入(或更新)MySQL表。您可以从中动态创建查询(如果您的值包含用户生成的内容,请使用PDO)。
如果您使用扩展模型,则由于某些原因出于某种原因在保存之前需要进行一些额外的处理,您仍然不得不自由重写。