database - Yii2 在链关系的最后一个添加条件

标签 database yii2

现在我有:

$products = Product::findAll([1,2,3,4]);
foreach ($products as $product){
    $text = $product->part->type->texts;
}

这会返回 Texts 表中的相关记录。

但是我只需要从中获得 1 条记录,为此我需要在最后一个连接 type->texts 中有一个条件,这在模型中没有定义。它是动态 session 变量。

有什么办法吗?

最佳答案

如果您想修改最后一个关系查询以具有附加条件并返回一个记录而不是多个记录,只需像这样更改最后一个关系调用:

$text = $product->part->type->getTexts()->andWhere(...)->one();

直接关系方法调用返回 yii\db\ActiveQuery 实例,因此您可以根据需要修改条件。

如果你想在不止一个地方使用修改后的关系,请为此创建单独的方法:

/**
 * @return yii\db\ActiveQuery
 */
public function getDynamicText()
{
    // Insert link from texts relation similar as in hasMany() and additional condition in andWhere()
    return $this->hasOne(...)->andWhere(...);
}

然后使用它:

$text = $product->part->type->dynamicText;

关于database - Yii2 在链关系的最后一个添加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589584/

相关文章:

php - Yii2 ~ SQL JOIN 2 个表

php - 将 uuid 分配给 yii2 中的模型

java - 如何获取微调器上所选项目的 ID?

database - 我应该使用数字还是电子邮件 ID 来识别网站上的用户?

database - 通过删除的成员连接到副本集成员

php - 如何从 Ubuntu CLI 运行 Yii 控制台应用程序?

php - yii2:在链接()之前验证()

python - 将值附加到 Django 模型

php - 如何在 codeigniter 中连接用户指定的数据库

javascript - Yi2 使用 SendFile() 下载文件