,用于存储关于某些网站用户定义的书签,我与复合键的表:关系的Yii ActiveRecord的用于表复合具有NULL键值
CREATE TABLE bookmarks (
user_id int not null,
book_id int not null,
page_id int,
...
);
CREATE UNIQUE INDEX ON bookmarks(user_id, book_id, page_id);
。注意,PAGE_ID可以为NULL,和USER_ID而book_id不能。当page_id为空时,为整本书设置书签,否则 - 对于某个页面。
相应的ActiveRecord类定义了一些关系:
public function relations() {
return array(
"user" => array(self::BELONGS_TO, "User", "user_id"),
"book" => array(self::BELONGS_TO, "Book", "book_id"),
"page" => array(self::BELONGS_TO, "Page", "page_id"),
);
}
和的PrimaryKey()方法::
public function primaryKey() {
return array("user_id", "book_id", "orig_id");
}
现在我想所有书签了整本书的一些用户。所以,我做的:
$bookmarks = Bookmark::model()->findAll(array(
"condition" => "t.user_id = :user_id AND t.page_id IS NULL",
"params" => array(":user_id" => 1),
));
它的伟大工程,返回4条记录,但很明显,我想从书本上表中使用的一些相关数据:
$bookmarks = Bookmark::model()->findAll(array(
"with" => "book",
"condition" => "t.user_id = :user_id AND t.page_id IS NULL",
"params" => array(":user_id" => 1),
));
,现在我得到0的记录(COUNT( $书签)== 0),尽管生成的SQL语句选择了所有需要的数据,但它仅仅被CActiveRecord类所识别。另一个奇怪的是,当我尝试获取所有页面书签时,一切正常:
$bookmarks = Bookmark::model()->findAll(array(
"with" => "book",
"condition" => "t.user_id = :user_id AND t.page_id IS NOT NULL",
"params" => array(":user_id" => 1),
));
我在做什么错了?如何在第二个例子中表达返回一些数据? PHP 5.4.0,Yii 1.1.8,PostgreSQL 9.1.4,+ 32 ° C以外。
很久以前,我一直在使用YII,据我记得你应该使用书签:: model() - >('book');' – Leri 2012-08-06 12:04:45
@PLB,我认为* Conditions *将被合并,所以不会有太大的区别(但是在这里+ 35°C,所以我可能是非常错误的)。 uisky,* book_id *这行没有NULL值,对吧? – 2012-08-06 12:27:56
@Boris Belenski,正确,user_id和book_id没有NULL的 – uisky 2012-08-06 12:40:46