如何使用Model的getter属性在Query Builder中使用

时间:2018-05-31 00:18:37

标签: laravel-5 eloquent laravel-query-builder

以下描述的是我的Post模型中的吸气剂:

public function getTicketIdAttribute() {
   return str_pad($this->id, 6, '0', STR_PAD_LEFT);
}

请注意,该功能只需在Post post_id的前面添加6个零填充。

现在,是否可以在查询构建器中使用它?我尝试过以下几点:

Post::where(function($query) use ($keyword) {
   $query->where('detail', 'LIKE', '%'. $keyword .'%')
         ->orWhereHas($query->getTicketIdAttribute(), 'LIKE', '%'. $keyword .'%');
});

我尝试做的是设置一个搜索引擎,查找Post对象如果

  1. $keywordPost' s detail
  2. 相匹配

    1. 如果$keywordgetTicketIdAttribute()
    2. 匹配

1 个答案:

答案 0 :(得分:0)

正如Jonas Staudenmeir所指出的,我需要使用PHP的LPAD()重写代码,所以:

LPAD(id, 6, '0')

并在查询生成器中使用它我需要使用DB::raw方法应用它,因为框中没有可用的等效LPAD()方法。所以,像这样使用它:

DB::raw("LPAD(id, 6, '0')")

请注意,这意味着在这种情况下,模型的getter属性不能直接在Query Builder中使用,因此需要以这种方式应用它。

希望这有助于其他人,我感谢Jonas Staudenmeir寻求帮助。