У меня проблема с моей моделью, потому что у меня есть отношения, которые имеют то же имя, что и столбец FK.
class Post extends CActiveRecord {
public function relations() {
return array(
'user' => array(self::BELONGS_TO, 'User', 'user')
);
}
}
Как сопоставить столбец user
с чем-то другим, чтобы я мог получить доступ как к отношениям, так и к FK под разными именами? Я не могу изменить столбец базы данных, потому что от него зависят другие приложения.
Я хочу иметь возможность сделать это:
$post = Post::findByPk(1);
$post->user_id; // returns foreign key
$post->user; // returns activerecord
Ниже реализация также будет прекрасной, но с использованием вышеуказанного отношения Yii просто возвращает [0=>1242]
для пользователя $post->user
.
$post->user;
$post->user->user_id;
Я специально НЕ хочу что-то вроде этого:
$post->user; // Returns FK
$post->userobject; // Returns ActiveRecord. Ugly!
TL;DR: как мне сопоставить столбец FK с другим атрибутом, чтобы он не противоречил отношению.
Насколько я вижу, ваша модель FK в модели Post для модели пользователя - user_id
а не user
.
$post->user_id; // returns foreign key
Если это не так, просто измените модель Post на эту форму, где user_id
хранит идентификатор соответствующей модели пользователя.
Итак, вы делаете так:
public function relations() {
return array(
'user' => array(self::BELONGS_TO, 'User', 'user_id')
);
}
Теперь не должно быть конфликтов, и вы сможете делать все, что пожелаете:
$post = Post::findByPk(1);
$post->user_id; // returns foreign key
$post->user; // returns activerecord
Я только что заметил:
Я не могу изменить столбец базы данных, потому что от него зависят другие приложения.
Вид плохой конструкции приложения.
Я специально НЕ хочу что-то вроде этого:
$post->user; // Returns FK
$post->userobject; // Returns ActiveRecord. Ugly!
как сопоставить столбец FK с другим атрибутом, чтобы он не противоречил отношению
Я бы не сделал таких вещей:
function getUser_id(){
return $this->user;
}
Кажется неразрешимой ситуацией, потому что вы пытаетесь избежать $post->userobject
!
Как насчет $post->userModel
? Если вы настаиваете на том, чтобы user
FK и user
качестве ссылки на соответствующую модель могли попасть в долгосрочную колею.
$post->related_user
для модели объекта выглядит более семантические :)