所以我有两列 - SizeX 和 SizeY。对于前端用户,我使用 Laravel mutator
public function getSizeAttribute(){
/**
* Set Size
*/
$size = $this->SizeX. " x ". $this->SizeY;
/**
* Return
*/
return $size;
}
要格式化尺寸,如SizeX x SizeY
。 Sizes
列不存在,因为它是动态的。是否可以在 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
变量转换回 SizeX
和 SizeY
的方法
最佳答案
如果您始终通过访问器创建复合变量,则可以使用解析该字符串的作用域。像这样的事情:
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/