Trait yii\db\ActiveRelationTrait

Implemented byyii\db\ActiveQuery
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/ActiveRelationTrait.php

ActiveRelationTrait 实现了活动记录关系查询的通用方法和属性.

公共属性

隐藏继承的属性

属性类型描述定义在
$inverseOf string 与该关系相反的关系的名字. yii\db\ActiveRelationTrait
$modelClass yii\db\ActiveRecord yii\db\ActiveRelationTrait
$multiple boolean 此查询是否表示与多个记录的关系. yii\db\ActiveRelationTrait
$primaryModel yii\db\ActiveRecord 关系查询的主模型. yii\db\ActiveRelationTrait
$via array|object 与连接表相关联的查询. yii\db\ActiveRelationTrait

公共方法

隐藏继承的方法

方法描述定义在
() ActiveRecordInterface[] all($db = null) yii\db\ActiveRelationTrait
__clone() 克隆内部对象. yii\db\ActiveRelationTrait
findFor() 查找指定主记录的相关记录. yii\db\ActiveRelationTrait
inverseOf() 设置与该关系相反的关系的名称. yii\db\ActiveRelationTrait
one() yii\db\ActiveRelationTrait
populateRelation() 查找相关记录并将其填充到主模型中. yii\db\ActiveRelationTrait
via() 指定与连接表关联的关系. yii\db\ActiveRelationTrait

属性详情

$inverseOf public 属性

与该关系相反的关系的名字. 例如, 一个订单有一个客户, 这意味着"customer"关系的反向是"orders", 而"orders"关系的反向是"customer". 如果设置了此属性, 则将通过指定的关系引用主记录. 例如, $customer->orders[0]->customer$customer是同一个对象, 访问订单的客户不会触发新的 DB 查询. 该属性仅在关系上下文中使用.

参见 inverseOf().

public string $inverseOf null

建立关系的主表和外表的列. 数组键必须是该关系的表的列, 而数组值必须是主表中的对应列. 请勿在列名称前添加前缀或引号, 因为这将由 Yii 自动完成. 该属性仅在关系上下文中使用.

public array $link null
$modelClass public 属性
$multiple public 属性

此查询是否表示与多个记录的关系. 该属性仅在关系上下文中使用. 如果为true, 则此关系将使用 all() 将所有查询结果填充到 AR 实例中. 如果为false, 则仅使用 one() 检索结果的第一行.

public boolean $multiple null
$primaryModel public 属性

关系查询的主模型. 仅在具有动态查询选项的延迟加载中使用.

$via public 属性

与连接表相关联的查询. 请调用 via() 设置此属性, 而不是直接设置它. 该属性仅在关系上下文中使用.

参见 via().

public array|object $via null

方法详情

() public 方法

ActiveRecordInterface[] all($db = null)

ActiveRecordInterface[] all($db = null)

public ( )
return
__clone() public 方法

克隆内部对象.

public void __clone ( )
findFor() public 方法

查找指定主记录的相关记录.

当以惰性方式访问 ActiveRecord 的关系时, 将调用此方法.

public mixed findFor ( $name, $model )
$name string

关系名称.

$model yii\db\ActiveRecordInterface|yii\db\BaseActiveRecord

主模型.

return mixed

相关记录.

throws yii\base\InvalidArgumentException

如果关系是无效的.

inverseOf() public 方法

设置与该关系相反的关系的名称.

例如, 一个订单有一个客户, 这意味着"customer"关系的反向是"orders". 如果设置了此属性, 则将通过指定的关系引用主记录. 例如, $customer->orders[0]->customer$customer将是同一对象, 访问订单的客户不会触发新的 DB 查询.

yii\db\ActiveRecord 类中声明关系时, 请使用此方法. 例如, 在 Customer 模型中:

public function getOrders()
{
    return $this->hasMany(Order::className(), ['customer_id' => 'id'])->inverseOf('customer');
}

这也可以用于 Order 模型, 但要消小心:

public function getCustomer()
{
    return $this->hasOne(Customer::className(), ['id' => 'customer_id'])->inverseOf('orders');
}

在这种情况下, 结果将取决于订单的加载方式. 假设客户有几个订单, 如果仅加载一个订单:

$orders = Order::find()->where(['id' => 1])->all();
$customerOrders = $orders[0]->customer->orders;

变量$customerOrders将仅包含一个订单.

如果订单是这样加载的:

$orders = Order::find()->with('customer')->where(['customer_id' => 1])->all();
$customerOrders = $orders[0]->customer->orders;

变量$customerOrders将包含客户的所有订单.

public $this inverseOf ( $relationName )
$relationName string

与该关系相反的关系的名字.

return $this

关系对象本身.

one() public 方法

public yii\db\ActiveRecordInterface one ( $db )
$db
return yii\db\ActiveRecordInterface
populateRelation() public 方法

查找相关记录并将其填充到主模型中.

public array populateRelation ( $name, &$primaryModels )
$name string

关系名称.

$primaryModels array

主模型.

return array

相关模型.

throws yii\base\InvalidConfigException

如果 $link 无效.

via() public 方法

指定与连接表关联的关系.

yii\db\ActiveRecord 类中声明关系时, 请使用此方法指定数据透视表记录/表:

class Order extends ActiveRecord
{
   public function getOrderItems() {
       return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
   }

   public function getItems() {
       return $this->hasMany(Item::className(), ['id' => 'item_id'])
                   ->via('orderItems');
   }
}
public $this via ( $relationName, callable $callable null )
$relationName string

关系名称. 这是指在 $primaryModel 中声明的关系.

$callable callable

一个 PHP 回调, 用于自定义与连接表关联的关系. 它的签名应该是function($query), 其中$query是要自定义的查询.

return $this

关系对象本身.