php - Laravel 在 where 子句中使用动态变量

标签 php laravel search laravel-5.1 mutators

所以我有两列 - SizeX 和 SizeY。对于前端用户,我使用 Laravel mutator

public function getSizeAttribute(){
    /**
     * Set Size
     */
    $size = $this->SizeX. " x ". $this->SizeY;
    /**
     * Return
     */
    return $size;
}

要格式化尺寸,如SizeX x SizeYSizes 列不存在,因为它是动态的。是否可以在 Elaquent 模型中使用更改器(mutator)或替代方法来检测这是一个动态属性,并使用某种方法将 SizeX x SizeY 转换为单独的列?一旦用户将属性 Size 提交回 Laravel 应用程序进行过滤?

编辑:

对,这是我用来检索过滤项目的方法

public function scopeFilteredMaterials($query,$params = array()){ 
    /**
     * Get filters
     */
    $filters = array();
    /**
     * Extract Info
     */
    if(!empty($params) && is_array($params)){
        /**
         * Get Available Filters
         */
        $filters = $this->getAvailableFilters();

        foreach ($filters as $key => $filter){
            if(isset($params[$filter])){

                $filters[$filter] = $params[$filter];

                unset($filters[$key]);
            }else{

                unset($filters[$key]);
            }
        }
    }

    foreach ($filters as $key => $filter){

        $query->whereIn(key ,$filter);
    }

    $result = $query->get();
}

这是过滤器变量,其中包含可供用户查看的可用过滤器

protected $filters = 数组( “姓名”, “网址”, “尺寸”, );

我使用上面的内容向用户显示特定值。一旦用户选择这些值,我就会使用相同的数组来检查这些过滤器并触发查询。我的问题是 Size 属性由两列组成,使用以下 Mutator 和 $appends 变量自动将值提供给用户时,我没有问题。

/**
 * Get Size Attribute
 */
public function getSizeAttribute(){
    /**
     * Set Size
     */
    $size = $this->SizeX. " x ". $this->SizeY;
    /**
     * Return
     */
    return $size;
}

但我无法找到将 Size 变量转换回 SizeXSizeY 的方法

最佳答案

如果您始终通过访问器创建复合变量,则可以使用解析该字符串的作用域。像这样的事情:

public function scopeSize($query, $size)
{
    $sizes = explode(' x ', $size);
    return $query->where('SizeX',  $sizes[0])->where('SizeY', $sizes[1]);
}

然后您可以在过滤器方法或其他任何地方使用此范围。

关于php - Laravel 在 where 子句中使用动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46847853/

相关文章:

php - php包装器类中的instanceof错误

php - 带有两个提交按钮的 Laravel 表单

php - 使用 PHP 类型将嵌套对象序列化/反序列化为 JSON

php - 重复的列名 Laravel

email - 拉维尔 5 : passing variable into subject

mysql - 根据表格检查 2 个唯一代码,然后注册表格

search - VIM:如何将搜索/替换命令添加到 vimrc 并映射到快捷方式

c - 查找 C 字符串中的位置

mysql - mysql 中的双重搜索?

javascript - 如何使用jquery正确加载php文件