У меня есть две таблицы: пользователи и профили. Пользователь может иметь профиль, а профиль должен иметь пользователя!CakePHP найти запись, которая соответствует двум таблицам
Таблицы:
Пользователи: ID имя пользователя электронной пароль
Профили: Firstname Lastname пол д.р. user_id
Итак, как вы можете видеть ссылки таблицы профилей обратно пользователям с помощью ключа user_id
Как просмотреть профиль на основе имени пользователя этого пользователя?
Как нужно извлекать информацию из обеих таблиц ... до сих пор у меня есть:
public function view ($username)
{
$profile = $this->Profile->find('first', array(
'conditions' => array('User.username' => $username)
));
if (empty($profile))
{
$this->cakeError('error404');
}
$this->set(compact('profile'));
}
и это маршрут для него:
Router::connect('/people/:userName',array('controller'=>'profiles','action'=>'view'),
array(
'userName'=>'[A-Za-z0-9\._-]+',
'pass'=>array('userName')
)
);
Также здесь являются модели:
Пользователь:
class User extends AppModel
{
var $name = 'User';
}
Я не указал пользователя hasOne профиля, так как у пользователя может не быть профиля. например учетной записи администратора
Профиль:
class Profile extends AppModel
{
var $name = 'Profile';
var $belongsTo = 'User';
}
и вот мое мнение:
<h1><?php echo $profile['Profile']['firstname']; ?> <?php echo $profile['Profile']['lastname']; ?></h1>
Но нужно немного порулить, чтобы получить его правильно. Согласно книге CakePHP 2.0 я могу сделать что-то вроде: $this->User-Profile->
, но я не совсем понимаю это или как я могу использовать его здесь ???
Например это было бы правильно:
$profile = $this->Profile->User->find('first', array( 'conditions' => array('User.username' => $username) ));
Благодаря
настроить отношения '$ hasOne'. Это не значит, что вы * обязательно * имеете профиль, но можете иметь только профиль * one *. Затем вы можете получить доступ к данным через ассоциации ('$ this-> User-> Profile ') – Ross