gpt4 book ai didi

yii - 引用 yii 中的关系应用默认范围

转载 作者:行者123 更新时间:2023-12-04 02:02:54 26 4
gpt4 key购买 nike

我在 yii 中找不到太多关于将默认范围应用于模型的文档,我想知道是否有人可以解释或指出我正确的方向。

我的问题的快速版本:

是否可以向默认范围添加关系,或者默认情况下向模型上的每个 AR 搜索添加“with”条件?

我的问题的长版:

我的应用程序的快速摘要:

我有两个型号,provideritem .其中有一个 m:1 关系,其中一个提供者可以有多个项目,但每个项目只能有一个提供者。

到目前为止,我有这些关系:

class Provider extends CActiveRecord
{
...
public function relations()
{
return array(
'items' => array(self::HAS_MANY, 'Item', 'id_provider', 'order'=>'rank DESC'),
);
}
...
}

class Item extends CActiveRecord
{
...
public function relations()
{
return array(
'provider' => array(self::BELONGS_TO, 'Provider', 'id_provider'),
);
}
...
}

在我的项目模型中,我已经有一个 defaultScope 过滤掉所有离线项目(即只显示设置为 offline = false 的项目):
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'condition'=>"`$alias`.`offline` = false",
);
}

我现在想做的是过滤掉提供者设置为离线的项目(即只显示 provider.offline = false 和当前 item.offline = false 旁边的项目)。

我试过在 defaultScope 中加入 providers 表:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'join'=>"JOIN `provider` AS `provider` ON `provider`.`id` = `$alias`.`id_provider`",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}

但是 JOIN 在 ON 语句之后应用,并导致错误( CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'provider.offline' in 'on clause' )。

我也试过在 defaultScope 中添加一个 with 条件:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'with'=>"provider",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}

但我得到了同样的错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'provider.offline' in 'on clause'`)。

有什么建议?

最佳答案

有几件事我会尝试:

首先,更改您的条件以适用于整个事情(并且不要忘记,如果提供者没有项目,则不会返回提供者)

public function defaultScope()
{
return array(
'with'=> array("provider" => array(
'condition'=> "t.offline = false AND provider.offline = false",
)
);
}

其次,尝试将范围添加到您的模型中,然后在默认范围中引用它们,如下所示:
public function defaultScope()
{
return array(
'scopes'=> array('default'),
);
}

class Provider extends CActiveRecord
{
...
public function scopes()
{
...
}
...
}

class Item extends CActiveRecord
{
...
public function scopes()
{
...
}
...
}

关于yii - 引用 yii 中的关系应用默认范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969774/

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