Yii2 Active Record 'with' 关系不返回子数据
Yii2 Active Record 'with' relation not returning child data
我是 YII 框架的新手,我正在尝试使用它来使用活动记录和 ORM 框架。
三张桌子请看图
这是我的 Customer 、 OrderType 和 Orders 代码
class Customer extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'Customer';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name'], 'required'],
[['id'], 'integer'],
[['name'], 'string'],
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getCustomers()
{
return $this->hasMany(CollectorCustomerMaster::className(), ['CollectorCode' => 'CollectorCode']);;
}
}
<?php
namespace api\modules\v1\models;
use Yii;
class OrderType extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'OrderType';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name'], 'required'],
[['id'], 'integer'],
[['name'], 'string'],
];
}
}
class Orders extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'Orders';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name','customer_id','order_type_id'], 'required'],
[['id','customer_id','order_type_id'], 'integer'],
[['name'], 'string'],
];
}
public function getOrderType(){
return $this->hasOne(OrderType::className(), ['id' => 'order_type_id']);
}
}
如果我尝试查询订单类型的订单,订单类型数据不是 coming.Here 我的代码,
if (Yii::$app->common->checkRequest('POST')) {
//if ($this->validateRoute('getCustomers')) {
$coCollector = Orders::find()->where(['id'=>'1'])->with('orderType')->one();;
if(isset($coCollector)){
$data2 = null;
Yii::$app->common->setCode(200);
$response = ['status' => Yii::$app->common->getCode(), 'message' =>'Success', 'data' =>$coCollector,'data2'=>$data2];
return $response;
}
// }
}
如果我 运行 这个,我会得到以下结果。
{
"status": 200,
"message": "Success",
"data": {
"id": "1",
"customer_id": "4",
"order_type_id": "1",
"name": "Aptitude "
},
"data2": null
}
如何获取订单类型数据???
请有人帮助我。我在互联网上彻底搜索我没有找到任何示例代码。
您已将 Order class 中的 OrderType 关系定义为 getOrderType()
函数。因此,您可以使用此关系函数获取 OrderType 数据。您可以像这样
直接在您的 Order class 对象上调用此关系函数
$orderTypeData = $coCollector->getOrderType();
或者您可以像下面这样简单地使用它
$orderTypeData = $coCollector->orderType;
。
然后你可以把它放在你的 $response
里。请检查此 documentation 以便更好地理解。
我是 YII 框架的新手,我正在尝试使用它来使用活动记录和 ORM 框架。
三张桌子请看图
这是我的 Customer 、 OrderType 和 Orders 代码
class Customer extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'Customer';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name'], 'required'],
[['id'], 'integer'],
[['name'], 'string'],
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getCustomers()
{
return $this->hasMany(CollectorCustomerMaster::className(), ['CollectorCode' => 'CollectorCode']);;
}
}
<?php
namespace api\modules\v1\models;
use Yii;
class OrderType extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'OrderType';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name'], 'required'],
[['id'], 'integer'],
[['name'], 'string'],
];
}
}
class Orders extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'Orders';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name','customer_id','order_type_id'], 'required'],
[['id','customer_id','order_type_id'], 'integer'],
[['name'], 'string'],
];
}
public function getOrderType(){
return $this->hasOne(OrderType::className(), ['id' => 'order_type_id']);
}
}
如果我尝试查询订单类型的订单,订单类型数据不是 coming.Here 我的代码,
if (Yii::$app->common->checkRequest('POST')) {
//if ($this->validateRoute('getCustomers')) {
$coCollector = Orders::find()->where(['id'=>'1'])->with('orderType')->one();;
if(isset($coCollector)){
$data2 = null;
Yii::$app->common->setCode(200);
$response = ['status' => Yii::$app->common->getCode(), 'message' =>'Success', 'data' =>$coCollector,'data2'=>$data2];
return $response;
}
// }
}
如果我 运行 这个,我会得到以下结果。
{
"status": 200,
"message": "Success",
"data": {
"id": "1",
"customer_id": "4",
"order_type_id": "1",
"name": "Aptitude "
},
"data2": null
}
如何获取订单类型数据??? 请有人帮助我。我在互联网上彻底搜索我没有找到任何示例代码。
您已将 Order class 中的 OrderType 关系定义为 getOrderType()
函数。因此,您可以使用此关系函数获取 OrderType 数据。您可以像这样
$orderTypeData = $coCollector->getOrderType();
或者您可以像下面这样简单地使用它
$orderTypeData = $coCollector->orderType;
。
然后你可以把它放在你的 $response
里。请检查此 documentation 以便更好地理解。