我一直在寻找解决方案,但没有运气。我有一个名为Currency的模型,它扩展了雄辩。
class Currency extends Eloquent {
protected $connection = 'currency';
protected $table = 'dbo.sfCXDetail';
public $timestamps = false;
public function monthlyTransactions(){
return Currency::select(array(DB::raw('COUNT(trx_number) AS Transactions'), DB::raw('MONTH(update_stamp) as TransactionsMonth')))
->whereBetween(DB::raw('DATEPART(YYYY, update_stamp)'), array(2012,2012))
->groupBy(DB::raw('YEAR(update_stamp)'))
->groupBy(DB::raw('MONTH(update_stamp)'))
->orderBy(DB::raw('YEAR(update_stamp)'))
->orderBy(DB::raw('MONTH(update_stamp)'))
->get();
}
}
问题是,DB :: raw使用数据库配置文件中的默认数据库,所以当我尝试使用时:
Currency::raw()
我收到错误
strtolower() expects parameter 1 to be string, object given
我正在使用的数据库不能用作默认数据库。如何在模型中使用当前数据库的DB :: raw方法?
当我将默认数据库设置为“currency”时,此查询可以正常运行,但如果我将其设置为使用本地默认的mysql数据库则不会。
这是在我的数据库配置文件中:
'currency' => array(
'driver' => 'sqlsrv',
'host' => 'xx',
'database' => 'xx',
'username' => 'xx',
'password' => 'xx',
'prefix' => '',
),
答案 0 :(得分:1)
您可以尝试这样的事情:
DB::connection('specialConnection')->raw(...);
此外,您必须为该连接添加另一个配置设置,如:
'currency' => array(
'driver' => 'sqlsrv',
'host' => 'xx',
'database' => 'xx',
'username' => 'xx',
'password' => 'xx',
'prefix' => '',
),
'specialConnection' => array(
'driver' => 'mySql',
'host' => 'xxx',
'database' => 'xxx',
'username' => 'xxx',
'password' => 'xxx',
'prefix' => '',
)
答案 1 :(得分:0)
我可能错了,但我认为将connection
属性设置为Currency
的受保护属性也不会为connection
设置DB class
。
会像这样的工作(我在工作中无法测试,抱歉):
$db = new DB;
$db->connection = 'currency'
$db->table = 'dbo.sfCXDetail';
...
return Currency::select(array($db->raw('COUNT(trx_number) ...
...
我认为这是范围之物