首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用特定连接的Laravel原始查询

使用特定连接的Laravel原始查询
EN

Stack Overflow用户
提问于 2015-01-15 10:03:04
回答 3查看 10.6K关注 0票数 5

我一直在尝试查询moodle数据库,需要使用DB::raw()。但是它一直在尝试使用默认的mysql连接。下面是我想要运行的查询。

代码语言:javascript
复制
SELECT mdl_course.id, mdl_course.category, mdl_course.fullname, mdl_course_categories.name, mdl_enrol.cost, FROM_UNIXTIME(mdl_course.startdate, '%m/%d/%y') AS startdate
FROM mdl_course
LEFT JOIN mdl_course_categories ON mdl_course_categories.id = mdl_course.category
LEFT JOIN mdl_enrol ON mdl_enrol.courseid = mdl_course.id AND mdl_enrol.enrol = 'paypal';

以下是我在我的模型中尝试的内容

代码语言:javascript
复制
$result = DB::connection('mysql2')->table('mdl_course')
->select(['mdl_course.id', 'mdl_course.category', 'mdl_course.fullname', 'mdl_course_categories.name', 'mdl_enrol.cost', DB::raw("FROM_UNIXTIME(mdl_course.startdate, '%m/%d/%y') AS startdate"])
->join('mdl_course_categories', 'mdl_course_categories.id', '=', 'mdl_course.category', 'left')
->join(DB::raw("LEFT JOIN mdl_enrol ON mdl_enrol.courseid = mdl_course.id AND mdl_enrol.enrol = 'paypal'"))
->where(function($query) use ($id) {
    if ($id)
    {
      $query->where('mdl_course.id', '=', $id);
    }
  })
  ->orderBy('mdl_course.fullname', 'ASC')
  ->get();

它一直尝试使用默认的mysql连接,该连接为空。到目前为止,我所读到的db::raw()将使用缺省连接。这是真的吗?如何开始运行这个查询?

EN

回答 3

Stack Overflow用户

发布于 2016-04-27 18:06:38

对于laravel 5.0 Initiate second database in <project path>\config\database.php,如bellow

代码语言:javascript
复制
'connections' => [

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

    'mysql2' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST2', 'localhost'),
        'database'  => env('DB_DATABASE2', 'forge'),
        'username'  => env('DB_USERNAME2', 'forge'),
        'password'  => env('DB_PASSWORD2', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ]
]

在模型中执行以下代码,以执行具有不同连接的原始查询。

代码语言:javascript
复制
class DbLog extends Model{
    protected $connection = 'mysql2';
    protected $table = 'users';
    public function select_all_db2_users(){
        $sql = "
            SELECT *
            FROM $this->table
            LIMIT 0,1;
        ";
        $results=DB::connection($this->connection)
            ->select(DB::raw($sql));
        return $results;
    }
}
票数 7
EN

Stack Overflow用户

发布于 2015-01-15 13:54:39

您可能应该在这里使用:

代码语言:javascript
复制
DB::connection('mysql2')->raw("LEFT JOIN mdl_enrol ON mdl_enrol.courseid = mdl_course.id AND mdl_enrol.enrol = 'paypal'")

而不是

代码语言:javascript
复制
DB::raw("LEFT JOIN mdl_enrol ON mdl_enrol.courseid = mdl_course.id AND mdl_enrol.enrol = 'paypal'")
票数 6
EN

Stack Overflow用户

发布于 2015-01-16 02:02:50

好了,我想通了。这就是我最终得到的结果。

代码语言:javascript
复制
$result = DB::connection('mysql2')->table('mdl_course')
  ->select([
      'mdl_course.id',
      'mdl_course.category',
      'mdl_course.fullname',
      'mdl_course_categories.name',
      'mdl_enrol.cost',
      DB::connection('mysql2')->raw("FROM_UNIXTIME(mdl_course.startdate, '%m/%d/%y') AS startdate")
  ])

  ->join('mdl_course_categories', 'mdl_course_categories.id', '=', 'mdl_course.category', 'left')
  ->leftJoin('mdl_enrol',function($join){
    $join->on('mdl_enrol.courseid', '=', 'mdl_course.id')
      ->where('mdl_enrol.enrol', '=', 'paypal');
  })

  ->where(function($query) use ($id) {
    if ($id)
    {
      $query->where('mdl_course.id', '=', $id);
    }
  })
  ->orderBy('mdl_course.fullname', 'ASC')
  ->get();

在我使用db::raw的select语句中,我还必须添加自定义连接。对于连接,我找到了一种不使用db::raw()的方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27955700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档