У меня есть две таблицы:
пользователи содержит (идентификатор, имя, адрес электронной почты) id
является первичным ключом.
users_details содержит (user_id, адрес, город, почтовый индекс) user_id
это внешний ключ к пользовательской таблице.
users.id=users_details.user_id
,
Я написал такую модель в User.php
class User extends AppModel {
public $name = 'User';
public $displayField = 'name';
public $primaryKey = 'id';
var $belongsTo = 'UsersDetail';
public $hasone = array(
'UsersDetail' => array(
'className' => 'UsersDetail',
'conditions' => '',
'fields' => '',
'foreignKey' => 'id',
'order' => '',
'dependent' => true
)
);
}
Я написал модель пользователей UsersDetail.php
class UsersDetail extends AppModel {
public $name = 'UsersDetail';
public $displayField = 'name';
public $belongsTo = array( 'User' =>
array( 'className' => 'User','foreignKey' => 'user_id') );
public $hasone = array(
'User' => array(
'className' => 'User',
'conditions' => '',
'fields' => '',
'foreignKey' => 'id',
'order' => '',
'dependent' => true
));
}
Я хочу получить данные из таблицы, используя соединение с условием. users.id=users_details.user_id
,
Вы объявили две связи для каждой ассоциации моделей, когда у вас должна быть только одна связь в каждом направлении.
Вот так:
В пользовательской детали модель:
public $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
)
);
И, следовательно, в пользовательской модели:
public $belongsTo = array(
'UserDetail' => array(
'className' => 'UserDetail',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
Проверьте документация Больше подробностей.
Укажите, чтобы запомнить:
отношение один к одному — hasOne — таблица пользователей имеет один users_detail.
принадлежать — А таблица userdetails принадлежит пользователь Таблица.
Итак, связь между двумя таблицами hasone и ownsto.
найдите правильный код ниже.
Модель пользователя:
public $hasOne = array('UsersDetail' => array(
'className' => 'UsersDetail',
'foreignKey' => 'user_id')
);
ПользователиДетальная модель
public $belongsTo = array('User' => array(
'className' => 'Users',
'foreignKey' => 'id',
'conditions' => '',
'fields' => '',
'order' => '')
);
которые обеспечивают соединение точно. Вы можете добавить условия, порядок в коллекциях.
Выходной запрос
SELECT `User`.`id`, `User`.`first_name`, `User`.`last_name`, `User`.`email`, `User`.`mobile`, `User`.`pswd`, `UsersDetail`.`user_id`, `UsersDetail`.`address`, `UsersDetail`.`city`, `UsersDetail`.`state`, `UsersDetail`.`postcode`, `UsersDetail`.`dob`, `UsersDetail`.`photo` FROM `cakedemo`.`users` AS `User` LEFT JOIN `cakedemo`.`users_details` AS `UsersDetail` ON (`UsersDetail`.`user_id` = `User`.`id`) WHERE 1 = 1
Спасибо,