我是新手,需要一些帮助。我有2张桌子......
CREATE TABLE `vehicles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`vehicle_type` varchar(50) NOT NULL,
`vehicle_make` varchar(50) NOT NULL,
`vehicle_model` varchar(50) NOT NULL,
`vehicle_year` varchar(50) NOT NULL,
`vin` varchar(50) NOT NULL,
`registered_state` varchar(10) NOT NULL,
`license_plate` varchar(20) NOT NULL,
`insurrance_policy` varchar(50) NOT NULL,
PRIMARY KEY(`id`)
)
ENGINE=INNODB;
CREATE TABLE `drivers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(50) NOT NULL,
`last_name` varchar(50) NOT NULL,
`dob` date NOT NULL,
`ss_no` varchar(50) NOT NULL,
`address` varchar(100) NOT NULL,
`city` varchar(50) NOT NULL,
`state` varchar(10) NOT NULL,
`zip_code` int(5) NOT NULL,
`cell_phone` varchar(50) NOT NULL,
`home_phone` varchar(50),
`dl_no` varchar(50) NOT NULL,
`dl_state` varchar(10) NOT NULL,
`dl_exp` date NOT NULL,
`dl_2_no` varchar(50) NOT NULL,
`dl_2_state` varchar(10) NOT NULL,
`dl_2_exp` date NOT NULL,
`vehicle_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY(`id`),
CONSTRAINT `Ref_01` FOREIGN KEY (`vehicle_id`)
REFERENCES `vehicles`(`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
ENGINE=INNODB;
SET FOREIGN_KEY_CHECKS=1;
正如你所看到的,每个司机都有一辆与他相关的车。如何在对象中查询与他相关的每个司机和每辆车。
我可以让所有的司机使用它。
$d = new Driver();
$data['driver'] = $d->get();
在我的驱动程序模型中
var $has_one = array('vehicle');
我想获取 $ data ['driver']
中的所有记录答案 0 :(得分:6)
这是一种简单的方法,假设你有一对一的关系:
在您的模型驱动程序:
中var $has_one = array('vehicle');
在您的模型车辆:
中var $has_one = array('driver');
获得车辆及其驾驶员:
$v = new Vehicle();
$v->include_related('driver')->get();
include_related()
仅适用于$has_one
相关模型。
现在,驱动程序的属性存储在$v
中,前缀为driver_
。要访问车辆的驾驶员栏目:
echo $v->driver_first_name;
echo $v->driver_last_name;
或者,您每次进入车辆时都可以auto-load驾驶员:
// In Vehicle
var $auto_populate_has_one = TRUE;
对于has-many关系,你可以这样做:
$d = new Driver();
$d->get_by_id($id);// Get a driver by id
foreach ($d->vehicle->get() as $car)
{
// Print all this Driver's vehicles
echo $car->vehicle_model;
}
这只是一种方法。有可能在Datamapper中访问关系的方法,最好的办法是read the documentation彻底,然后再读一遍。 Datamapper是一个很棒的ORM,您应该学习并试验它的所有功能,以便充分利用它。
答案 1 :(得分:0)
这可能是在您的驱动程序表中使用外键的好机会。以下是表格中使用外键的MySQL文档的链接:MySQL Foreign Keys
或者,如果您不想处理高级MySQL调用的麻烦,您也可以只处理两个查询,一个到您的车辆表,一个到您的驱动程序表,然后使用PHP迭代(循环)通过结果,直到您可以找到并匹配正确的值。
实际上两种方式设置可能都有点麻烦,但是你的外键可能更容易维护。