4

私はこれに不慣れで、少し助けが必要です。私は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']のすべてのレコードを取得したい

4

2 に答える 2

6

1対1の関係があると仮定すると、次の1つの簡単な方法があります。

モデルドライバーの場合:

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;

または、車両にアクセスするたびにドライバーを自動ロードすることもできます。

// 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;
}

これはそれを行うための1つの方法にすぎません。Datamapperの関係にアクセスする方法はいくつかありますが、最善の策は、ドキュメントをよく読んでから、もう一度読むことです。データマッパーは優れたORMであり、そのすべての機能を学習して実験し、データマッパーを最大限に活用する必要があります。

于 2011-05-01T22:51:26.370 に答える
0

これは、ドライバーテーブルで外部キーを使用する良い機会になる可能性があります。テーブルでの外部キーの使用に関するMySQLドキュメントへのリンクは次のとおりです。MySQL外部キー

または、高度なMySQL呼び出しの煩わしさを処理したくない場合は、2つのクエリを処理することもできます。1つは車両テーブル、もう1つはドライバーテーブルで、PHPを使用して結果を反復(ループ)します。正しい値を見つけて一致させることができます。

実際には、両方の方法を設定するのはおそらく少し面倒ですが、外部キーの方が保守が簡単になる可能性があります。

于 2011-05-01T18:52:23.303 に答える