一、要点:
1、数据库查询采用all()的方法,则需要for循环来取值。
2、查询指定字段:$model_Member = Member::find()->select('nickname')->where([ 'id' => $student_id ])->asArray()->one();
2、多表关联查询:https://www.imooc.com/video/7852 简洁明了,深入浅出。需要注意:结果缓存问题及多次查询问题
HelloController
<?php
namespace app\controllers;
use yii\web\Controller;
use app\models\Test;
use app\models\Customer;
use app\models\Order;
class HelloController extends Controller{
public function actionIndex(){
//根据顾客查询订单信息
$customer = Customer::find()->where(['name'=>'zhangsan'])->one();
//方法一
$order = $customer->hasMany(Order::className(),['customer_id' =>'id'])->asArray()->all();
//方法二
$order = $customer->getOrders();
//方法三
$orders = $customer->orders;
//根据订单查询顾客的信息
$order = Order:a:find()->where(['id'=>1])->one();
$customer = $order->customer;
print_r($customer);
}
}
Customer.php
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Customer extends ActiveRecord{
//帮助顾客获取订单信息
public funtion getOrders(){
$orders = $this->hasMany(Order::className(),['customer_id'=>'id'])->asArray();
return $orders;
}
}
Order.php
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Order extends ActiveRecord{
//根据订单查询顾客的信息
public funtion getCustomer(){
return $this->hasOne(Customer::className(),['id'=>'customer_id'])->asArray();
}
}
二、常用查询方法
Customer::find()->one(); 此方法返回一条数据的对象;
Customer::find()->all(); 此方法返回所有数据的对象;
Customer::find()->count(); 此方法返回记录的数量;
Customer::find()->average(); 此方法返回指定列的平均值;
Customer::find()->min(); 此方法返回指定列的最小值 ;
Customer::find()->max(); 此方法返回指定列的最大值 ;
Customer::find()->scalar(); 此方法返回值的第一行第一列的查询结果;
Customer::find()->column(); 此方法返回查询结果中的第一列的值;
Customer::find()->exists(); 此方法返回一个值指示是否包含查询结果的数据行;
Customer::find()->batch(10); 每次取10条数据
Customer::find()->each(10); 每次取10条数据,迭代查询
//根据sql语句查询:查询name=test的客户
Customer::model()->findAllBySql("select * from customer where name = test");
//根据主键查询:查询主键值为1的数据
Customer::model()->findByPk(1);
//根据条件查询(该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面)
Customer::model()->findAllByAttributes(['username'=>'admin']);
//子查询
$subQuery = (new Query())->select('COUNT(*)')->from('customer');
// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');
//关联查询:查询客户表(customer)关联订单表(orders),条件是status=1,客户id为1,从查询结果的第5条开始,查询10条数据
$data = (new Query())
->select('*')
->from('customer')
->join('LEFT JOIN','orders','customer.id = orders.customer_id')
->where(['status'=>'1','customer.id'=>'1'])
->offset(5)
->limit(10)
->all()
最近用yii2新做网站:
湖南漂亮妈妈产后修复:http://www.plmmchxf.com/
澳门君天集团:http://www.macaojt.com/
城启国际(香港)设计有限公司:http://www.citykeyhk.com/