在PHP和MySQL中使用可搜索数组数据存储和检索对象

在PHP和MySQL中使用可搜索数组数据存储和检索对象,php,mysql,orm,Php,Mysql,Orm,想象一下你上了一堂像这样的课 class Person { public $id; public $name; public $cars = array(); } 其中,$cars是一个汽车数组(例如,数组(“梅赛德斯”、“丰田”)) 您将如何将该数据存储在数据库中,以便可以搜索数组(例如,选择所有拥有丰田汽车的人),并使用相同的查询检索完全填充的对象(例如,获取属于这些人的所有其他汽车) 编辑: “存储对象”指的是它的数据 创建一个名为person的表和一个名为car的表,以及一个名为

想象一下你上了一堂像这样的课

class Person {
 public $id;
 public $name;
 public $cars = array();
}
其中,
$cars
是一个汽车数组(例如,
数组(“梅赛德斯”、“丰田”)

您将如何将该数据存储在数据库中,以便可以搜索数组(例如,选择所有拥有丰田汽车的人),并使用相同的查询检索完全填充的对象(例如,获取属于这些人的所有其他汽车)

编辑:


“存储对象”指的是它的数据

创建一个名为
person
的表和一个名为
car
的表,以及一个名为
car\u person

  CREATE TABLE `car` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
       `name` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  CREATE TABLE `person` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
       `name` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


   CREATE TABLE `car_person` (
    `car_id` int(11) unsigned NOT NULL,
      `person_id` int(11) NOT NULL,
        PRIMARY KEY (`car_id`,`person_id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
另外,在PHP中创建一个Car类:

class Car {
  public $id;
  public $name;
 }
然后使用Person类中的汽车数组是汽车对象数组,而不是名称….

这是一个典型的例子。示例表如下:

人:

id
name
id
person_id
car_id
id
manufacturer
人车:

id
name
id
person_id
car_id
id
manufacturer
车辆:

id
name
id
person_id
car_id
id
manufacturer

您可以在上找到更多设计示例以及示例查询。

您不会将
对象
存储在数据库中,而是根据从数据库检索的数据创建
对象
。您至少需要两个表,
person\u tbl
带有(
id
name
cars
)和
cars\u tbl
带有(
id
car
)的表,然后您可以对这两个表进行查询。我尝试通过连接两个表来完成此操作,但问题是当查询包含“WHERE car.name='toyota'”,只取丰田,不取属于此人的其他汽车。加入表格两次,一次获取所有汽车,一次使用WHERE子句这可能正是我缺少的。你能举个例子吗?我现在的查询如下:从{person}p internal Join{person\u car}中选择p.*,c.car AS carpc对pc.person\u id=p.id内部连接{car}c对c.id=pc.car\u id WHERE(c.car='toyota')PS:如果你能将它添加到“答案”中,那就太棒了,因为我想你应该得到我的支持:)谢谢你,我现在得到了。这会导致一些重复,我可以用distinct消除。不知道这是最有效的方法吗。