【问题标题】:Laravel 4 Query Builder with different databases具有不同数据库的 Laravel 4 查询生成器
【发布时间】:2013-07-08 16:26:09
【问题描述】:

我已经成功使用 Laravel 4 一段时间了,直到我发现了一个最近的问题。我正在使用备用数据库连接来检索产品列表。我的问题是我没有找到一种方法来创建像DB::connection('foo') 这样的连接并以查询构建器样式实现我的查询。我假设它是一些 IoC 行为,但我对内部框架的代码缺乏了解让我远离答案

谢谢大家

【问题讨论】:

    标签: database laravel laravel-4 query-builder


    【解决方案1】:
    1. 在 app/config/database.php 中添加第二个连接

          'mysql2' => array(
              'driver'    => 'mysql',
              'host'      => 'localhost',
              'database'  => 'database2',
              'username'  => 'user2',
              'password'  => 'pass2'
              'charset'   => 'utf8',
              'collation' => 'utf8_unicode_ci',
              'prefix'    => '',
      
    2. 现在使用第二个连接:

      DB::connection('mysql2')->select('where...');

    【讨论】:

    • 是的,文档是这么说的。但我想要的是类似 DB::connection('mysql2')->table('foo')->join(...)->where(array(...)) 的查询生成器方式
    • 我放在上面的例子是伪代码,不起作用。使用@shift answer,我所能做的就是在 select 方法的引号之间编写一个 SQL 命令。我想要的(现在我认为做不到)是在使用额外的数据库连接时不要丢失查询生成器属性。如果您已经有 Eloquent 和查询构建器来帮助您,那么使用字符串查询对我来说没有任何意义
    • @AlwinKesler 你可以做到。请参阅my answer here,我认为 Shift 是从那里复制的? - 我的回答有更多关于做你想做的事的细节。你实际上回答了你自己的问题。在为另一个 MySQL 连接设置配置后,您可以完全按照您所说的那样使用 DB::connection('mysql2')->table('foo')->join(...)->where(array(...))注意您不能跨不同的数据库进行联接。
    • 你是说DB::connection('mysql2')->table('foo')...给你一个错误吗?
    • 我发现了问题.. 我的“伪代码”猜测是正确的。问题出在具有 mysql 4.1+ 密码问题的外部服务器上,我将其归因于 laravel 替代连接。谢谢大家
    【解决方案2】:

    完成此操作的正确方法是DB::connection('mysql2')->table('foo')->join(...)->where(array(...))

    我的问题超出了这个问题的范围。 谢谢大家。

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 2015-12-14
      • 2014-01-13
      • 2022-01-24
      • 2016-09-28
      • 2013-06-28
      • 2014-05-13
      • 2014-03-13
      • 2021-01-23
      相关资源
      最近更新 更多