YII2连接oracle数据,关联查询问题,已解决 [ 2.0 版本 ]
标题两张表
明显我以tbl_order表为主显示表,tbl_order表中的customer_id关联tbl_customer表中的id字段。
配置文件
用gii生成代码就不多说了
我的model层文件
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "{{%order}}".
*
* @property integer $id
* @property integer $customer_id
* @property integer $price
*/
class Order2 extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return '{{%order}}';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'customer_id', 'price'], 'required'],
[['id', 'customer_id', 'price'], 'integer'],
[['id'], 'unique'],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'customer_id' => 'Customer ID',
'price' => 'Price',
];
}
/**
* 关联顾客表Customer
*/
public function getCustomer2(){
// hasOne要求返回两个参数 第一个参数是关联表的类名 第二个参数是两张表的关联关系
return $this->hasOne(Customer2::className(),['id'=>'customer_id']);exit;
}
}
<?php
namespace app\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\Order2;
/**
* Order2Search represents the model behind the search form about `app\models\Order2`.
*/
class Order2Search extends Order2
{
/**
* @inheritdoc
*/
public $name;
public function rules()
{
return [
[['id', 'customer_id', 'price'], 'integer'],
['name','safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = Order2::find();
$query->joinWith(['customer2']);
$query->select("{{%order}}.*,{{%customer}}.name");
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'customer_id' => $this->customer_id,
'{{%customer}}.name' => $this->name,
'price' => $this->price,
]);
return $dataProvider;
}
}
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "{{%customer}}".
*
* @property integer $id
* @property string $name
*/
class Customer2 extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return '{{%customer}}';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'name'], 'required'],
[['id'], 'integer'],
[['name'], 'string', 'max' => 20],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'name' => 'name',
];
}
}
表的关联,在主表tbl_order表中
在Order2Search中
前端显示
添加顾客姓名的搜索框
执行搜索条件,!
QQ图片20161228185843.png
下面是我的页面效果!
fange
注册时间:2016-12-21
最后登录:2017-01-15
在线时长:2小时14分
最后登录:2017-01-15
在线时长:2小时14分
- 粉丝1
- 金钱60
- 威望10
- 积分180
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 1 条评论
算是很完整了