在数据库中不包含列的模型属性上过滤ListEntry

时间:2019-09-06 08:59:30

标签: php backpack-for-laravel

我想在自定义计算的布尔属性上过滤一个Backpackforlaravel列表。数据库中没有此属性的列。

我已经在模型中创建了该属性作为雄辩的访问器。

public function getCalculatedBooleanAttribute($value)
{
    $bool = // get result of calculation as true/false
    return $bool;
}

然后我可以在控制器中使用以下内容将值显示为一列。

$this->crud->addColumn('calculated_boolean');

到目前为止,此方法运行良好,我可以在列表视图中看到预期的结果。我现在需要对此过滤视图...

我已经尝试使用addClause使用标准的Crud筛选器,但这给出了有关缺少数据库字段的异常。例如

$this->crud->addClause('where', 'calculated_boolean', '1'); 

Column not found: 1054 Unknown column 'calculated_boolean' in 'where clause'

我在文档中找不到任何显示如何对此属性进行过滤的内容。谁能建议一种方法来过滤数据库中没有列的字段?

1 个答案:

答案 0 :(得分:1)

的确。您的访问器只是一个以某种方式操纵MySQL响应的PHP函数。您在Laravel访问器中执行的任何操作都会在数据库响应后发生。因此,您不能向口才查询添加访问器。

您可能可以使用whereRaw在addFilter闭包(第三个参数)中将该列添加到查询中:

basicConfig

请注意,您可以操纵import logging from logging.handlers import RotatingFileHandler from logging import FileHandler def main(): def normalLogging(fn1): global normalLogger global normalLogger normalLogger = logging.getLogger(fn1) normalLogger.setLevel(logging.DEBUG) handlerScreen = FileHandler(fn1) handlerScreen.setFormatter(logging.Formatter('%(asctime)s %(message)s')) normalLogger.addHandler(handlerScreen) def rotatingLog(fn2): global rotatingLogger rotatingLogger = logging.getLogger(fn2) rotatingLogger.setLevel(logging.DEBUG) handlerScreen = RotatingFileHandler(fn2, maxBytes=1000, backupCount=3) handlerScreen.setFormatter(logging.Formatter('%(asctime)s %(message)s')) rotatingLogger.addHandler(handlerScreen) # ... rest ... t