php - CodeIgniter DataMapper ORM v1.8.0 - 如何从多个表中获取记录

标签 php mysql codeigniter codeigniter-datamapper

我是新手,需要一点帮助。我有一个 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']中的所有记录

最佳答案

这是一种简单的方法,假设您有一对一的关系:

在您的模型驱动程序中:

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;

对于有很多的关系,你可以这样做:

$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,您应该学习和试验它的所有功能以充分利用它。

关于php - CodeIgniter DataMapper ORM v1.8.0 - 如何从多个表中获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849439/

相关文章:

php - 联系表 : Why won't this form validate?

mysql - Rails MySQL 自动生成列

php - 在 2 个或更多表上使用 SELECT

javascript - 如何在新标签页中打开 amcharts.com 信用链接

php - CodeIgniter 基本 Controller 扩展

php - 文本区域、新行和 nl2br 的问题

javascript - 尝试使用 jquery-csv 解析 Mustache.js 模板的 csv 时出现语法错误

php - 表中的删除功能不起作用

mysql - 使用正则表达式仅获取数字

php - 上传的 csv 不起作用