查询联接两个表

时间:2018-11-25 12:46:06

标签: php laravel

我在laravel中有查询,但是我只是想知道如何在php中查询,因为我对php不熟悉。

这是我在laravel中的查询:

$data = DB::table('users')
            ->join('order_schedules','users.id','=','order_schedules.driver_id')
            ->select('order_schedules.driver_id','users.name','order_schedules.date_time')
            ->orderBy('date_time','asc')
            ->get();

用户表= ID,名称,电子邮件和密码。

order_schedules = id,driver_id,类型和date_time。

我只想显示id,名称和date_time。我希望有人能帮助我。非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以从Laravel的查询构建器轻松获得完整的SQL查询。

$sql = DB::table('users')        
          ->join('order_schedules','users.id','=','order_schedules.driver_id')
          ->select('order_schedules.driver_id','users.name','order_schedules.date_time')
          ->orderBy('date_time','asc')
          ->toSql();

$sql将给出完整的sql查询。

此外,具有绑定的查询只有在将值与查询绑定为时,才会返回完整查询

$query_buider = DB::table('users')        
                  ->join('order_schedules','users.id','=','order_schedules.driver_id')
                  ->select('order_schedules.driver_id','users.name','order_schedules.date_time')
                  ->orderBy('date_time','asc')
                  ->where('order_schedules.driver_id', 1) // Note this condition.
                ;

$sql = array_reduce($query_buider->getBindings(), function($sql, $binding){
    return preg_replace('/\?/', is_numeric($binding) ? $binding : "'".$binding."'" , $sql, 1);
}, $query_buider->toSql());

$sql将给出完整的sql查询。

此外,任何人都想遵循DRY方法来获取完整的SQL,

  1. 使用 AppServiceProvider boot() 方法添加以下宏功能。

    \Illuminate\Database\Query\Builder::macro('toFullSql', function(){
        return array_reduce($this->getBindings(), function($sql, $binding){
            return preg_replace('/\?/', is_numeric($binding) ? $binding : "'".$binding."'" , $sql, 1);
        }, $this->toSql());
    });
    
  2. 向Eloquent Builder添加别名。

    \Illuminate\Database\Eloquent\Builder::macro('toFullSql', function(){
        return ($this->getQuery()->toFullSql());
    });
    
  3. 然后照常调试。

    \Log::debug(User::first()->jobs()->toFullSql());