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

比如:

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,不知道有什么办法实现?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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);
    }
});
7年前 评论

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

7年前 评论

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

7年前 评论

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

7年前 评论

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