【问题标题】:Laravel ORM: Query without table prefixLaravel ORM:不带表前缀的查询
【发布时间】:2019-07-09 19:43:15
【问题描述】:

我正在做一个项目,我必须与一些表格集成,形成 wordpress 和其他系统。为了为我的 Laravel 项目设置数据库,我选择使用表前缀,对于我的项目表,它工作正常。

我的问题是当我必须使用 Laravel 处理来自其他系统的表时。例如,下面的查询将我的项目的表前缀添加到它:

$item = DB::table('cnp_item')
                ->where('code', $row[1])
                ->first();

不是查询cnp_item 表,而是查询laravel_cnp_item 表,该表不存在。

我知道这是有道理的,因为我配置了一个表前缀。我的问题是我是否可以在某些查询中做任何事情以使其忽略我的表前缀。

感谢您的帮助

【问题讨论】:

    标签: php laravel orm


    【解决方案1】:

    您可以在 config/database.php 中定义一个不同的不同连接,省略 prefix 设置:

    'connections' => [
      'mysql' => [
        ...
        'prefix' => 'laravel',
        ...
      ], 'alternate' => [
        ...
        'prefix' => '',
        ...
      ]
    ],
    

    然后,如果您想查询没有该连接的表,请使用DB::connection() 即时切换到它:

    $item = DB::connection('alternate')->table('cnp_item')->where('code', $row[1])->first();
    

    或者,如果您使用Model,您应该能够定义connectiontable,所以您只需要这样做:

    class CNPItem extends Model {
      protected $connection = 'alternate';
      protected $table = 'cnp_items';
      ...
    }
    

    那么你可以像这样简单地查询:

    $item = CNPItem::where('code', $row[1])->first();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      相关资源
      最近更新 更多