查询时,如何忽略当前表不存在的字段

比如:

User::where('mall_id',3)->get();

其实user表中并没有mall_id字段,此时会“列未定义”。
而我希望实现的需求是不报错,只是自动忽略那些非定义字段的查询条件。
尝试了用where回调函数中Schema::hasColumn判断来做:

$this->query->where(function($query){
    if(\Schema::hasColumn('users','mall_id')) {
        $query->where('mall_id', $this->request->mall_id);
    }
});

而现在有另一个需求是,这一段query的使用对象不确定,也就是Model不确定是User,所以Schema::hasColumn里的users希望是自动识别当前查询的表名,而不是写死的users,不知道有什么办法实现?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

试试这个

$this->query->where(function($query){
    $table = $query->getModel()->getTable();
    if(\Schema::hasColumn($table,'mall_id')) {
        $query->where('mall_id', $this->request->mall_id);
    }
});
8年前 评论

@song 5.2里面标示找不到getModel方法

8年前 评论

@terranc 那你先dump一下$query看是什么对象,看有什么办法能找到对应的表吧

8年前 评论

@song 看了,感觉没有可用的。

8年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!