创建用于使用多个表的活动记录


Create an activerecord for using more than one table

我想在 yii2 中创建一个活动记录,与其他基于 activerecord 的模型相同,但不同之处在于我想使用多个表。

例如,我在数据库中有一个名为 orders 的表和另一个表order-items

订单

是按订单购买用户的产品,订单ID连接到orders表。现在我想要一个用于控制两者并使用活动记录功能的模型。

例如,我可以获取保存在订单表中的客户 ID 以及保存在 order-items 中的产品数组。

查看下面的代码:

//get name of customer that saved in order table
$customer = $model->customer;
//get an array of products saved in order-item
$items = $model->items;
//get number of item 3 saved in order-item
$num = $items[3]->number;

如果可以在活动记录类中使用关系,那就更好了。

参考此链接

如果你想

使用两个表拥有自己的活动记录,你应该重写baseActiveRecord类的一些函数。

说明如下所示,但您应该在自己的情况下进行测试和更改:

  1. 将一个表定义为基表。
  2. 重写attributes()方法并定义表2中可能存在的一些新属性。
  3. 重写find()方法或创建一个新的ActiveQuery类以在查找方法中使用,以便在搜索中使用 find 时创建一些复杂的选择或联接,并选择表 1 和表 2 中的所有字段。
  4. 重写save()update()活动记录的方法,以将表 2 字段保存在数据库中。

在数据库中保存数据时,请注意在重写的保存和更新方法中使用事务。