【问题标题】:Calling relations on other relations of model yii 1.1在模型 yii 1.1 的其他关系上调用关系
【发布时间】:2020-04-14 21:06:11
【问题描述】:

我有 3 个型号的价格、描述和产品

Description 模型与 Price 模型有关系,Price 模型与 Product 有关系。

当我尝试使用价格关系在描述模型上获取产品时,我可以调用产品吗?

这就是我想要做的事情

$description = Description::model()->with('Price')->findAll();
// after that I want to call the product which is on price.

他们都是使用他们的 id 连接的。 product_id、description_id 和 price_id

我怎样才能做到这一点?有办法吗?

【问题讨论】:

    标签: php yii relationship yii1.x


    【解决方案1】:

    首先,JFYI 当您使用with() 方法从ActiveRecord 的查询构建器建立连接部分时,请仔细检查特定AR 模型中的relations() 方法以查看实际定义的关系。我指出这一点是因为将关系定义到模型中并在稍后阶段通过查询构建器访问它们是区分大小写的。

    回到你的问题。

    如果您已经获取了您的Description 模型,热切地加入了with() 您的Price 模型,当您调用$description->price->product 时,在幕后ActiveRecord 将执行所谓的lazy-loading 方法。

    根据Yii 1.1 文档 -> https://www.yiiframework.com/doc/guide/1.1/en/database.arr

    1. 执行关系查询
      执行关系查询的最简单方法是读取 AR 实例的关系属性。 如果之前没有访问过该属性,则会启动一个关系查询,将两个相关的表和过滤器与当前 AR 实例的主键连接起来。查询结果将作为相关 AR 类的实例保存到属性中。 这称为延迟加载方法,即仅在最初访问相关对象时执行关系查询。

    下面的例子展示了如何使用这种方法:

    // retrieve the post whose ID is 10
    $post = Post::model()->findByPk(10);
    // retrieve the post's author: a relational query will be performed here
    $author = $post->author;
    

    希望这会有所帮助。

    【讨论】:

    • 这只是正常的方式,我的意思是单一的关系模型方法。我想要的更像是嵌套关系模型方法。无论如何,我已经弄清楚了我的问题的答案。非常感谢您的努力。
    • 随时。我将添加一些说明以提供全面的信息,但是您可能已经在这里结束了,因为您告诉您解决了这个问题。如果你特别想预先加载嵌套的层次关系,你可以这样做: $description = Description::model()->with('price.product')->findAll();
    • 注意到这一点。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多