我有一个名为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();
答案 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()
进行调试,或仅查看结果并检查数据库。确保您获取的实际值与表架构相对应。