Laravel ORM:不带表前缀的查询

时间:2019-07-09 19:43:15

标签: php laravel orm

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

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

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

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

我知道这很有意义,因为我配置了表前缀。我的问题是,在某些查询中是否可以做些什么使它忽略我的表前缀。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以在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();