关于YII中的hasMany 和 hasOne的用法

博客介绍了Python中数据库表的一对多和一对一关系,给出创建表的SQL代码,包括`customer`和`order`表。还展示了配置两个模型`Order`和`Customer`的代码,以及控制器中实现一对多和一对一查询的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hasMany  ------------------------- (一对多关系)比如 一个人有多个订单 

hasOne --------------------------(一对一关系)比如一个订单只能能一个人购买

下面是代码

创建连个表 

CREATE TABLE `customer` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `customer_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `order` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `order_name` varchar(255) DEFAULT NULL,
  `customer_id` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

配置两个模型

Order.php

class  Order  extends  \yii\db\ActiveRecord{
       public function getCustomer(){
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
     }

}

Customer.php

namespace app\models;
use app\models\Order;
use Yii;
class  Customer extends  \yii\db\ActiveRecord{
   public  function  getOrders(){
      return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
}

控制器的代码

HasController.php

 public  function  actionIndex(){
        //一对多查询
        $id = 1;
        $customer = Customer::findOne($id);
        $list = $customer->getOrders()->asArray()->all();
        //一对一查询
        $order = Order::findOne(['id'=>1]);
        $customer =  $order->getCustomer()->asArray()->one();
        print_r($customer);
     }

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/hongjiang/blog/3054571

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值