DB :: raw()始终使用默认数据库

时间:2014-02-04 17:55:50

标签: php laravel laravel-4

我一直在寻找解决方案,但没有运气。我有一个名为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'   => '',
    ),

2 个答案:

答案 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) ...
...

我认为这是范围之物