【问题标题】:Yii2 access the Joined table columnYii2 访问 Joined table 列
【发布时间】:2017-01-08 05:25:53
【问题描述】:

我是 Yii2 的新手,我想知道如何在 ActiveRecord 中访问关系表的值

例如,我们有这 2 个模型:

供应商有很多产品

产品只有一个供应商

class Supplier extends ActiveRecord{

        public function getProducts(){
            return $this->hasMany(Product::className(),["supplier_id"=>"id"]);
        }
        public static function tableName(){
            return 'supplier';
        }
    }

class Product extends ActiveRecord
{
    public function getSupplier(){
        return $this->hasOne(Supplier::className(),['id'=>'supplier_id']);
    }
    public static function tableName()
    {
        return 'product';
    }
}

要访问产品数据,我使用这行代码

$product=Product::find()->joinWith('supplier')->all();
var_dump($product);

此代码正确地为我提供了产品表的数据,但我无法访问供应商数据值,为什么?如何访问连接表的值?

【问题讨论】:

  • $product->supplier相关数据。
  • @ineersa 试过了,供应商是私有的
  • 当然它是私有的,也是数组中的。当您编写$product->supplier 并且此属性不存在时,基本模型的__get() 方法将调用getSupplier() 方法。这就是 Yii 中这些东西(某种吸气剂)的工作原理。
  • @ineersa 我试过你告诉 $product->supplier 这是我收到的错误:尝试获取非对象的属性
  • find()->asArray()->all() 将返回数组中的记录。

标签: php mysql activerecord yii2


【解决方案1】:

如果您想访问联接数据,请使用asArray():

Product::find()->joinWith("supplier")->asArray()->all();

【讨论】:

    【解决方案2】:

    如果您想通过 joinWith 访问供应商数据,请使用以下内容

    $product=Product::find()->joinWith('supplier')->all();
    

    如果您想访问供应商数据,它将返回数组,然后使用以下

    $product[0]->supplier
    

    它将返回供应商模式,您现在可以访问任何属性,例如

    $product[0]->supplier->name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 2014-05-10
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多