【问题标题】:Eloquent ORM "standalone" DB::raw fails雄辩的 ORM “独立” DB::raw 失败
【发布时间】:2013-09-19 11:50:15
【问题描述】:

对于我正在进行的项目,我使用的是独立的 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)

【问题讨论】:

    标签: php orm eloquent


    【解决方案1】:

    好吧,找了很久的解决方案,在 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');
    

    【讨论】:

      【解决方案2】:

      我来这里是为了寻找如何将自制的数据库播种器包装在事务中。

      对应的函数是 DB::transaction(function(){});

      话虽如此,DB 是一个门面。根据Laravel Facade Documentation 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()
      {
        // your transaction code here
      });
      

      【讨论】:

      • 谢谢@Kirkland,在独立的 Eloquent 中使用事务对我很有用
      猜你喜欢
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 2015-03-31
      • 2013-08-19
      • 2017-10-05
      • 2018-08-06
      相关资源
      最近更新 更多