#php #cakephp #has-one
#php #cakephp #имеет-один
Вопрос:
У меня есть 2 модели, Venue
и Contact
, где 1 место имеет 1 контакт, но 1 контакт может отвечать за многие места. В моих таблицах venue.contactid
ссылается на столбец contact.id
Мои модели выглядят так:
class Contact extends AppModel {
public $useTable = 'contact';
public $belongsTo = [
'Contact'=>[
'className'=>'Venue',
'foreignKey'=>'contactid',
'conditions'=>['Contact.id = Venue.contactid']
]];
}
class Venue extends AppModel {
public $useTable = "venue";
public $hasOne = [
'Contact'=>[
'className'=>'Contact',
'foreignKey'=>'id',
'conditions'=>['Venue.contactid = Contact.id']
]];
}
Проблема в том, что, когда я извлекаю место проведения, в Contact
поле все установлено null
равным .
Ответ №1:
Ваш код должен быть:
class Contact extends AppModel {
public $useTable = 'contact';
public $hasMany = [ // Has many, you said it
'Venue'=> [ // Venue here, not Contact
'className'=>'Venue',
'foreignKey'=>'contactid'
] // No need of conditions, you don't have anything special
];
}
class Venue extends AppModel {
public $useTable = "venue";
public $belongsTo = [ // the contactid is in the venue table, it's a belongsTo not a hasOne
'Contact' => [
'className'=>'Contact',
'foreignKey'=>'contactid'
]
];
}
Вы допустили некоторые ошибки между hasOne
и belongsTo
и другими отношениями, посмотрите здесь http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html .
В любом случае, вы должны попытаться сохранить соглашение CakePHP, чтобы упростить свой код. Если вы измените свое поле contactid
на contact_id
и добавите an s
к именам таблиц, ваш код станет:
class Contact extends AppModel {
public $hasMany = ['Venue'] ;
}
class Venue extends AppModel {
public $belongsTo = ['Contact'] ;
}
Комментарии:
1. Спасибо за это, я попробую это, когда вернусь к работе. Я новичок в CakePHP и унаследовал базу данных от предыдущего разработчика.
Ответ №2:
Вы должны изменить свой код следующим образом.
class Contact extends AppModel {
public $useTable = 'contact';
public $belongsTo = [
'Venue'=>[
'className'=>'Venue',
'foreignKey'=>'contactid',
'conditions'=>['Venue.contactid = Contact.id' ]
]];
}
Комментарии:
1. Я внес изменения, но это не решило проблему
2. Вы проверяли с помощью отношения $hasMany ?