gpt4 book ai didi

model - Yii 对同一张表的多重关系

转载 作者:行者123 更新时间:2023-12-04 23:23:58 25 4
gpt4 key购买 nike

我在 中定义了以下关系UserBan 模型:

public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'user' => array(self::BELONGS_TO, 'User', 'userId'),
'target' => array(self::BELONGS_TO, 'User', 'targetId'),
'author' => array(self::BELONGS_TO, 'User', 'authorId'),
);
}

现在当我尝试做:
$criteria->with = array('user', 'target');

它会发出以下警告,因为 User mdel 与 Nicknames 有默认的作用域关系:
Not unique table/alias: 'nicknames'

查询语句:
    SELECT COUNT(DISTINCT `t`.`id`) FROM `userban` `t` 
LEFT OUTER JOIN `user` `user` ON (`t`.`userId`=`user`.`id`)
LEFT OUTER JOIN `nickname` `nicknames` ON (`nicknames`.`userId`=`user`.`id`)
LEFT OUTER JOIN `user` `target` ON (`t`.`targetId`=`target`.`id`)
LEFT OUTER JOIN `nickname` `nicknames` ON (`nicknames`.`userId`=`target`.`id`)
WHERE ((user.name LIKE :username) AND (:dateStart<=t.createdAt AND :dateEnd>=t.createdAt))

我该如何克服?我在哪里“别名”我的连接表?

编辑
以下是 User 模型的默认范围:
 public function defaultScope()
{
return array(
'with' => 'nicknames',
'together' => true
);
}

最佳答案

当您为同一个表定义多个关系时,最好为每个关系指定唯一的别名。你在指定关系时这样做:

return array(
'user' => array(self::BELONGS_TO, 'User', 'userId', 'alias' => 'unick'),
'target' => array(self::BELONGS_TO, 'User', 'targetId', 'alias' => 'tnick'),
'author' => array(self::BELONGS_TO, 'User', 'authorId', 'alias' => 'anick'),
);

请参阅 CActiveRecord::relations 的文档想要查询更多的信息。

更新:看来您还需要使用不同的别名来加入 nicknames表在您的默认范围内。我不确定最好的方法是什么,但这很有效,而且很容易做到:
public function defaultScope()
{
static $counter = 0;

return array(
'with' => array(
'nicknames' => array('alias' => 'nick'.($counter++))
),
'together' => true,
);
}

关于model - Yii 对同一张表的多重关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16647297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com