我如何在Laravel中的查询生成器中使用函数

时间:2018-12-09 10:44:07

标签: php laravel

我有一个名为getValue的函数,该函数用于从数据库的表中获取字符串值,并且具有3个参数

public static function getValue($entityId, $itemId, $langId){
    $value = EntityLocalization::select('value')
            ->where('entity_id' ,'=', $entityId)
            ->where('item_id', '=', $itemId)
            ->where('lang_id', '=', $langId)->first();   
    return $value;
}

如何在查询生成器中使用此功能,并从记录值中给出其参数。 这是控制器中的查询生成器,它的错误

      $data['products'] = DB::table('products')
                                    ->join('entity_localizations', 'entity_localizations.item_id', '=', 'products.id')
                                    ->select('products.id as id',DB::raw('ifnull(entity_localizations.value ,products.name) as name'),
                                    'products.photo as photo','products.price as price',
                                    getValue(1, 'products.product_epartment_id',1) 
                                    ->where('entity_localizations.entity_id', '=', 1)
                                    ->get();

3 个答案:

答案 0 :(得分:0)

使用以下内容

雄辩:selectRaw(getValue(...) . ' as someColumnName')

否则:DB::raw();

答案 1 :(得分:0)

您的getValue函数是static函数,您应该通过函数的相对类名YourClassName::getValue(1, 'products.product_epartment_id',1)调用该函数,也可以使用self关键字(self::getValue(1, 'products.product_epartment_id',1) ),如果函数与您使用查询的类别相同。

此外,如果您将函数的返回值用作select函数的参数,则此函数应返回单个字符串和有效的列值。

答案 2 :(得分:0)

您尝试使用的值可能与表字段名称不匹配。

正如Rohit所写,您应该返回一个字符串,也可以使用firstOrfail()引发更精确的异常。然后,您会发现是否要获取null而不是实际值。

return EntityLocalization
  ::where('entity_id' ,'=', $entityId)
  ->where('item_id', '=', $itemId)
  ->where('lang_id', '=', $langId)
  ->firstOrFail()
  ->value;

通过转储查询->toSql()进行调试,或仅查看结果并检查数据库。确保您获取的实际值与表架构相对应。