在数据库查问中,不免要多表联查,tp给咱们提供了一个 模型关联 ,来防止咱们 应用 join来做关联。

我这里以一对多为例子:

order表为主表,order_goods为关联表。

定义order模型

<?phpnamespace 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表模型

<?phpnamespace appmodel;use thinkModel;class OrderGoods extends Model{    //因为是关联表所以能够什么都不行写,但必须要定义}

当咱们要查问一个订单并获取这个定中的商品时:

order表查问一条记录:
<?phpdeclare (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;        }    }

其余关联形式的应用也是相似的。