YII2 如何实现 yii1的以下代码?
'receiverList'=>array(self::MANY_MANY, 'User', '_general_messagesend_receiver_link(messageSend_id, receiver_id)'),
'countKnow'=>array(self::STAT,'MessageReceive','messageSendId','condition'=>'isKnow=1'),
YII2 如何实现 yii1的以下代码?
'receiverList'=>array(self::MANY_MANY, 'User', '_general_messagesend_receiver_link(messageSend_id, receiver_id)'),
'countKnow'=>array(self::STAT,'MessageReceive','messageSendId','condition'=>'isKnow=1'),
MANY_MANY
Your Yii1 code:
'receiverList' => array(
self::MANY_MANY,
'User',
'_general_messagesend_receiver_link(messageSend_id, receiver_id)'
),
In Yii2, use hasMany() with viaTable():
public function getReceiverList()
{
return $this->hasMany(User::class, ['id' => 'receiver_id'])
->viaTable('_general_messagesend_receiver_link', ['messageSend_id' => 'id']);
}
Then you can access it like:
$messageSend->receiverList
Or:
$messageSend->getReceiverList()->all();
STAT
Your Yii1 code:
'countKnow' => array(
self::STAT,
'MessageReceive',
'messageSendId',
'condition' => 'isKnow=1'
),
In Yii2, you can create a relation and count it:
public function getMessageReceives()
{
return $this->hasMany(MessageReceive::class, ['messageSendId' => 'id']);
}
public function getCountKnow()
{
return $this->getMessageReceives()
->andWhere(['isKnow' => 1])
->count();
}
Then:
$count = $messageSend->countKnow;
So the Yii1 → Yii2 equivalent is generally:
Yii1 MANY_MANY → Yii2 hasMany() + viaTable()
Yii1 STAT → Yii2 hasMany() + count()