是否可以在数据库中插入Object?

OM *_*ity 11 php mysql object

是否可以在数据库中插入Object?(在PHP访谈中提问.)

You*_*nse 17

是的,有可能,使用serialize().

但答案巨大依赖于上下文.


kni*_*ttl 11

没有人建议OR-mappers?有趣的......

如果创建数据库表以便它们表示对象,则可以使用对象关系映射器将对象成员的值存储到数据库中.

对于PHP存在推进和许多其他

  • ORM为+1.我通常会使用Doctrine. (4认同)

Sou*_*abh 6

如果您正在讨论PHP对象,则无法将对象插入数据库.要将其存储到数据库中,首先需要对其进行序列化,并在使用时对其进行反序列化.


Dan*_*iel 5

这个问题非常含糊不清.我的意思是,一方面,您可以序列化一个对象并将其插入数据库.但是,"插入对象"取决于上下文.例如,他是指你可以调用SQL语句这样的事实:

$a = new object();

// This makes no sense.
$sql = "Insert into table_name values($a);";
Run Code Online (Sandbox Code Playgroud)

如果这就是他所要求的,那么答案是否定的,除非你重写__toString()返回要插入数据库的值的方法,否则你不能这样做.即使这样,该类也没有很好地定义,因为你说__toString()将是一个数据库值,但是没有引用类对象本身就没有明确定义或暗示.

但无论如何,如果Object表示数据库表等,那么您希望根据职责分离每个项目.例如,您可以拥有定义数据库表的对象A,然后使用"管理器"对象B来插入,更新,删除和从数据库中选择项目.例如:

// NOT REAL PHP CODE....
class Table_Name 
{
    // Define primary keys, foreign keys, and attributes of the table.
    private $column1;
    public function setColumn1($value);
    public function getCOlumn1();
}

class Table_Name_Manager
{
    public function insert(Table_Name $obj);
    public function delete(Table_Name $obj);
    public function select(Table_Name $obj);
}
Run Code Online (Sandbox Code Playgroud)

以上内容对我来说最有意义,因为它清楚地定义了您期望的行为.您可以简单地使用管理器从数据库中获取项目,并修改对象,然后您可以再次调用管理器并插入,更新或删除.