thinkphp8 globalScope属性,定义全局的查询范围,怎么解除
想实现在某个模型中,定义一下,该模型的查询就自动都解除了,但是没找到方法
只有每次查询都加一个withoutGlobalScope()可以解决问题,但是有点麻烦
所有数据表都有is_deleted字段,使用全局查询范围
abstract class BaseModel extends \think\Model
{
// 全局查询作用域
protected $globalScope = ['softDelete'];
/**
* 软删除全局作用域
*/
public function scopeSoftDelete($query)
{
$query->where('is_deleted', 0);
}
}
menu数据表中没有is_deleted字段,所有关于menu的查询自动解除全局查询
在menu模型中,重写一下scopeSoftDelete()方法,操作为空,即可
class Menu extends BaseModel
{
protected $name = 'sys_menu';
/**
* 软删除全局作用域-sys_menu 表无 is_deleted 字段,禁用软删除全局作用域
*/
public function scopeSoftDelete($query)
{
}
}
以下解决方法,来自网络
此模型下不管怎么查询都会加上全局条件
<?phpnamespace app\model;
use think\Model;
class user extends Model {
//全局范围查询,就是在此模型下不管怎么查询都会加上全局条件;
// 定义全局的查询范围
protected $globalScope = ['status'];
public function scopeStatus($query)
{
$query->where('status',1);
}
}
控制器任何语句都会自动加上上面的status=1 的判断
$res = UserModel::select();
echo db::getlastsql();
如下:
SELECT \* FROM `tp\_user` WHERE `status` = 1
解除的方法 1 全解
UserModel::withoutGlobalScope()
2 针对解除
UserModel::withoutGlobalScope(['status'])
如:
$res = UserModel::withoutGlobalScope()->select();
echo db::getlastsql();
p($res->toArray());
生产
SELECT * FROM `tp_user`
“最难不过坚持”
本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作
有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339
- https://jueru.net/
-
评 留言
- :weixiao:
-
评 留言
- :shuijiao: :weiqu: :zhenbang: :leng:
-
评 留言
- :yiwen: :yiwen: :yiwen: :yiwen:
-
评 EasySass: could not generate CSS file. See Output panel for details.
- 这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
-
评 TP6模型事件-查询后onAfterRead不好用