activerecords php,php – Yii 2:ActiveRecords中的虚拟字段

我使用MySQL和Yii 2.在数据库中存在表’Regions’和列’coordinates’.此列的类型是点.

在SQL中我可以写:

“选择X(坐标)为x,Y(坐标)为y”和“INSERT INTO区域SET坐标= PointFromText(‘POINT(”.$x.“”.$y.“)’)”.

但我不知道如何制作ActiveRecord模型.我想要这个(数据库没有改变):

$item = Regions::findOne(1);

echo $item->x." ".$item->y;

$item->x = $new_x;

$item->y = $new_y;

$item->save(); // data saved in 'coordinates' column

方法’set …()’和’get …()’对我没有帮助.我想避免对数据库的其他查询.

请帮我做.

解决方法:

你可以用Yii2做到这一点:

public $longitude, $latitude;

/**

* @inheritdoc

*/

public function beforeSave($insert)

{

$this->location = new \yii\db\Expression("GeomFromText(:point)", [

':point'=>'POINT('. $this->longitude.' '.$this->latitude.')'

]);

return parent::beforeSave($insert);

}

/**

* @inheritdoc

*/

public static function find()

{

return parent::find()->select([

'*', 'X(location) as longitude', 'Y(location) as latitude'

]);

}

标签:php,mysql,activerecord,yii2

来源: https://codeday.me/bug/20190708/1401476.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值