对于我正在进行的项目,我正在使用Eloquent ORM独立版,如this page所述。一切都运行正常,除了我不能在我的代码中使用DB :: raw。我收到了以下PHP错误:
Fatal error: Class 'DB' not found
这是正确的,因为我只使用Laravel框架中的Eloquent,而不是Laravel本身。是否可以使用像DB :: raw这样的东西,所以我可以使用特定的SQL代码?例如where(DB::raw('YEAR(DateField)'),2013)
答案 0 :(得分:11)
好吧,寻找一个解决方案多年,在SO上问它,并在互联网上的其他地方找到答案。
Model::whereRaw('YEAR(DateField) = 2013')
可以解决问题。
编辑:
如果您想在任何其他部分使用DB::raw
(例如在select
中,您可以使用以下内容:
use Illuminate\Database\Query\Expression as raw;
// You can now use "new raw()" instead of DB::raw. For example:
$yourVar = YourModel::select(new raw("count(FieldA) AS FieldACount"),'FieldB')->groupBy('FieldB')->lists(new raw('FieldACount'),'FieldB');
答案 1 :(得分:1)
我来到这里看看如何在交易中包装一个自制的数据库播种机。
这个函数是DB :: transaction(function(){});
话虽如此,DB是一个门面。根据{{3}} DB引用DatabaseManager和Connection。
如果您使用的是独立的Eloquent,那么您将希望从Capsule对象中获取连接。代码最终看起来像这样:
use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
]);
// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));
// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();
// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();
$db = $capsule->getConnection();
$db->transaction(function()
{
//您的交易代码在这里 });