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
发表评论