在数据库查询中,难免要多表联查,tp给我们提供了一个 模型关联 ,来避免我们 使用 join来做关联。
我这里以一对多为例子:
order表为主表,order_goods为关联表。
定义order模型
<?php
namespace appmodel;
use thinkModel;
class Order extends Model
{
public function goodsList()
{
//可以以链式操作的方式,对查询的数据进行筛选~~~~。 如我这里只查询商品图片。
return $this->hasMany(OrderGoods::class,'order_id','order_id')
->field('goods_image as image');
}
}
定义order_goods表模型
<?php
namespace appmodel;
use thinkModel;
class OrderGoods extends Model
{
//因为是关联表所以可以什么都不行写,但必须要定义
}
当我们要查询一个订单并获取这个定中的商品时:
order表查询一条记录:
<?php
declare (strict_types = 1);
namespace app\controller\api;
use app\model\OrderGoods;
use app\model\Order as OrderModel;
class Order extends Base{
public function order(){
//查询到这条数据
$data = OrderModel::find(1);
//直接调用一下关联的方法 ,获取关联数据
$data->goodsList;
}
}
当order表查询多条记录时
public function order(){
//查询到是多条数据
$list = OrderModel::where('id','>',1)->select();
foreach ($list as $item){
//一对多关联查询
$item->goodsList;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。