使用多重查找表的cakephp
全部 我一直在学习php,并建立了一个简单的网站来跟踪车辆故障和维修,但现在我正试图将其转移到cakephp框架,以使其更易于使用。我的问题是我有4张桌子使用多重查找表的cakephp,php,mysql,cakephp,Php,Mysql,Cakephp,全部 我一直在学习php,并建立了一个简单的网站来跟踪车辆故障和维修,但现在我正试图将其转移到cakephp框架,以使其更易于使用。我的问题是我有4张桌子 故障与修复 车辆清单 症状清单 故障代码列表 每次维修可以有3辆车辆、3个症状和3个与之相关的代码,因此我有一个查找表将故障/维修id链接到症状、代码和车辆 我已设置了车辆的基本代码、症状和故障代码模型,如下所示: public $hasAndBelongsToMany = array( 'Fault' =>
public $hasAndBelongsToMany = array(
'Fault' =>
array(
'className' => 'Fault',
'joinTable' => 'Faults_vehicles',
'foreignKey' => 'vehicle_id',
'associationForeignKey' => 'fault_id'
)
);
这让我可以用给定的车辆ID在故障表中搜索任何故障,这很好。我的问题是如何设置它,以便使用给定的车辆ID和具有匹配故障代码ID的给定症状ID在故障表中搜索故障
我对php非常陌生,刚刚开始使用cakephp,如果这毫无意义,请提前表示歉意
谢谢你的时间
j出于两个原因,您需要手动进行连接(请参阅),而不是依赖CakePHP的可包含或递归功能:
$this->Fault->recursive = -1;
$this->Fault->find('all', array(
'contain' => array('Code'),
'joins' => array(
array(
'table' => '(SELECT * FROM vehicles LEFT JOIN
faults_vehicles ON faults_vehicles.vehicle_id = vehicles.id)'
'alias' => 'Vehicle',
'type' => 'inner',
'conditions' => array(
'Vehicle.fault_id = Fault.id',
'Vehicle.code' => $vehicleCode,
),
),
array(
'table' => '(SELECT * FROM symptoms LEFT JOIN
faults_symptoms ON faults_symptoms.symptom_id = symptoms.id)'
'alias' => 'Symptom',
'type' => 'inner',
'conditions' => array(
'Symptom.fault_id = Fault.id',
'Symptom.code' => $symptomCode,
),
),
array(
'table' => '(SELECT * FROM codes LEFT JOIN
faults_codes ON faults_codes.code_id = codes.id)'
'alias' => 'Code',
'type' => 'inner',
'conditions' => array(
'Code.fault_id = Fault.id',
'Code.code' => $faultCode,
),
),
),
));
非常感谢你,我已经试着解决这个问题一段时间了。我对其进行了一些更改,并添加了一些if语句,以便在未选择车辆或症状时搜索所有故障。这段代码是有效的,但我不想知道我是否可以做得更好或以更好的方式做 在我的控制器中,我这样称呼模型 $this->set('searchResults',ClassRegistry::init('fault')->getSearchResults($vehicle,$dtc,$symptom)) 然后我的模型是:
function getSearchResults($vehicle, $dtc, $symptom) {
$VehicleSearch = null;
$DtcSearch = null;
$SymptomSearch = null;
if($symptom != 'ALL'){
$SymptomSearch = array(
'table' => '(SELECT * FROM symptoms LEFT JOIN
faults_symptoms ON faults_symptoms.symptom_id = symptoms.id)',
'alias' => 'Symptom',
'type' => 'inner',
'conditions' => array(
'Symptom.fault_id = Fault.id',
'Symptom.symptom_id' => $symptom,
),
);
}
if($vehicle != 'ALL'){
$VehicleSearch = array(
'table' => '(SELECT * FROM vehicles LEFT JOIN
faults_vehicles ON faults_vehicles.vehicle_id = vehicles.id)',
'alias' => 'Vehicle',
'type' => 'inner',
'conditions' => array(
'Vehicle.fault_id = Fault.id',
'Vehicle.vehicle_id' => $vehicle,
),
);
}
if($dtc != 'ALL'){
$DtcSearch = array(
'table' => '(SELECT * FROM dtcs LEFT JOIN
faults_dtcs ON faults_dtcs.dtc_id = dtcs.id)',
'alias' => 'Dtc',
'type' => 'inner',
'conditions' => array(
'Dtc.fault_id = fault.id',
'Dtc.dtc_id' => $dtc,
),
);
}
$this->recursive = -1;
$Results = $this->find('all', array(
'conditions' => array(),
'joins' => array(
$VehicleSearch,$DtcSearch,$SymptomSearch
,
),
));
return $Results;
}
非常感谢大家的帮助
杰森