Я чувствую себя довольно глупым, чтобы задавать этот вопрос, но я сбитый с толку, вероятно, потому, что я немного запугался cakePHP (новичок и не очень удобен), но его достоинства практически заставляют меня использовать Это. Поэтому, если вы могли бы помочь, я ценю это:cakePHP- получение из базы данных. Модели Ассоциации и база данных
Моя проблема заключается в понимании того, как работает модельная ассоциация. Пройдя весь раздел об ассоциациях, я все еще боюсь, и на самом деле я не совсем уверен, ошибочны ли мой дизайн базы данных или ассоциации между моделями.
Вот она: У меня есть 3 модели, которые являются: Донор, BloodGroup, DonorType
Начнем с того, что я не совсем уверен, если я должен создать модель для каждой таблицы в БД. Мои таблицы выглядеть следующим образом:
+-------donors-------+
| donor_id (pk) |
| name |
| surname |
| donor_type_id (fk) |
| blood_group_id (fk)|
| |
+--------------------+
+----donor_types-----+
| type_id (pk) |
| type |
| |
+--------------------+
+----blood_groups----+
| blood_group_id(pk) |
| group |
| |
+--------------------+
Донор Модель
class Donor extends AppModel{
public $hasOne = array(
'BloodGroup'=> array(
'className' => 'BloodGroup'
),
'DonorType' => array(
'className' => 'DonorType'
)
);
По таблицам в базе данных, выше, как отношения могут быть описаны. Я уже использую ассоциацию, чтобы зарегистрировать новый донор со значениями извлеченных из группы крови таблица/модели, используя этот код в моем контроллере:
$ this-> набор («bloodGroups», $ this-> Донор -> BloodGroup-> find ('list', array ('fields' => array ( 'BloodGroup.blood_group_id', 'BloodGroup.blood_group' ) ) ));
Поэтому я думаю, что ассоциация верна. Однако, теперь я хочу, чтобы отобразить сохраненные пользователям соответствующие детали, но генерируется ошибка SQL:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'BloodGroup.donor_id' in 'on clause'
Это конечно, потому что нет «donor_id» как Ф.К. внутри таблицы BloodGroup, на самом деле в таблице доноров есть blood_group_id как fk. Итак, каково это решение? Является ли дизайн db ошибочным или есть способ, которым я могу переопределить ассоциацию внутри пирога?
спасибо за разъяснение hasOne/belongsTo .. О первичном ключе, что, если мне нужно, чтобы иметь 'Эхо $ this-> Form-> input ('blood_group_id') echo $ this-> Form-> input ('type_id') ' – LogixMaster
Вы можете отлично это сделать из формы для' Donor'. Торт даже помогает вам, если вы следуете соглашениям и устанавливаете '$ bloodGroups' и' $ type' в качестве массивов для своего представления, и он будет создавать выпадающие списки со всеми возможными значениями из связанных моделей. – Oldskool
Первое, большое спасибо Oldskool! Во-вторых, да, я сейчас это делаю! Итак, как я скажу cakePHP, что '$ this-> Form-> input ('id')' для таблицы blood_group И '$ this-> Form-> input ('id')' для таблицы donor_type не то же самое? Знает ли он внутренне каким-то образом? – LogixMaster