thinkphp6 with关联加where条件

文章描述:

thinphp6关联模型加where条件查询

 

数据表

user数据表

CREATE TABLE `lbs_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `nickname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `is_lock` tinyint(1) NOT NULL DEFAULT '0',
  `status` tinyint(1) DEFAULT '0',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

INSERT INTO `lbs_user` VALUES (1, 'admin', '小坏蛋', 0, 1, NULL);
INSERT INTO `lbs_user` VALUES (2, 'test', '测试', 0, 0, NULL);

role数据表

CREATE TABLE `lbs_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `code` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

INSERT INTO `lbs_role` VALUES (1, '管理员', 'admin', NULL);
INSERT INTO `lbs_role` VALUES (2, '测试', 'test', NULL);

user_role中间关联数据表

CREATE TABLE `lbs_user_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` tinyint(11) DEFAULT NULL,
  `role_id` tinyint(11) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

INSERT INTO `lbs_user_role` VALUES (1, 1, 1, '2024-04-19 04:17:21');
INSERT INTO `lbs_user_role` VALUES (2, 1, 2, '2024-04-19 06:15:10');
INSERT INTO `lbs_user_role` VALUES (3, 2, 2, '2024-04-19 06:13:12');

模型

user模型

<?php
namespace app\model;
use think\Model;

class UserModel extends Model
{
    // 表名
    protected $name = 'user';

    public $timestamps = false;


    public function roles()
    {
        /**
            关联模型(必须):关联模型类名
            中间表:默认规则是当前模型名+_+关联模型名 (可以指定模型名)
            外键:中间表的当前模型外键,默认的外键名规则是关联模型名+_id
            关联键:中间表的当前模型关联键名,默认规则是当前模型名+_id
         */
        return $this->belongsToMany(RoleModel::class,UserRoleModel::class,'role_id','user_id');
    }
}

 

role模型

<?php
namespace app\model;
use think\model;

class RoleModel extends Model{
    // 表名
    protected $name = 'role';

    public $timestamps = false;
}

 

关联模型

<?php
namespace app\model;
use think\model;

use think\model\Pivot;

class UserRoleModel extends Pivot{
    // 表名
    protected $name = 'user_role';

//    public $timestamps = false;
    protected $autoWriteTimestamp = true;
}

 

使用with这里需要加上getQuery()方法

 $data = UserModel::with(['roles' => function ($query) {
//            $query->where('role_id',2); // 有问题
            $query->getQuery()->order(['name'=>'desc']); // 解决
//              $query->getQuery()->where('role_id',2)->order(['name'=>'desc']);

        }])->select()->toArray();

 

结果:

 

发布时间:2024/04/19

发表评论