Laravel获取原始查询结果

时间:2019-10-31 04:58:46

标签: laravel laravel-5

我不希望laravel将查询结果格式化为数组或对象..etc。我想要的只是从数据库运行结果集,然后我将在自己的自定义代码中手动进行获取。

此刻,我运行了选择查询并将结果存储在数组中。之所以这样做,是因为结果很大,我想直接将其流式传输到API。

$result = self::$db->select('select * from customer');

如何告诉laravel返回我的查询结果集,而无需任何格式?

6 个答案:

答案 0 :(得分:2)

您可以像这样使用DB:Raw

$results = DB::table('users')->select(DB::raw("*"))->get()

$results = DB::select('select * from users where id = ?', [1]);

这两个将返回一个没有任何强制转换或关系等的整洁对象。顺便说一下,您还可以通过简单的雄辩模型来制作API需要的任何对象或数组。请详细说明您要从模型查询中提取的数据类型。

答案 1 :(得分:1)

您必须使用->toSql()->dd()

实例

Customer::toSql(); // select * from `customer`

如果您需要某种条件

$query = Customer::where(`some conditions`);
$sql = $query->toSql();
$bindings = $query->getBindings();
$sql = str_replace('?', '%s', $sql);
$sql = sprintf($sql, ...$bindings);

答案 2 :(得分:0)

use App\User;
use App\Customer

$result = User::get();
$result1 = Customer::get();
$result3 = Customer::where("id","=","1")->get();
print_r($result3);

答案 3 :(得分:0)

您可以使用以下类似的toArray()toJson()方法:

        $array = Customer::all()->toArray();
        $json = Customer::all()->toJson();
        echo '<pre>';
        print_r($array);
        print_r($json);

如果您要运行原始SQL Queries,则可以执行以下操作

        $users = DB::select('select * from users where 1');
        echo '<pre>';
        print_r($users);

答案 4 :(得分:0)

您可以使用 1)查询构建器方式:-

DB :: table('your_table_name)-> select('your_col_names')-> get();

例如:-DB :: table('shop')-> select('product_id','product_name')-> get();

2)使用laravel Raw

$ orders = DB :: table('orders')-> selectRaw('price *?as price_with_tax',[1.0825])-> get();

3)用于选择原始

$ product_count = DB :: table('product')-> select(DB :: raw('count(*)as total_product_count'))-> where('status',1)-> get();

答案 5 :(得分:0)

谢谢大家,我最终编写了一个原始函数来查询数据库中想要的数据。

  public static function dataStreamJSON($stmt, $headers)
  {

    return Response::stream(function() use ($stmt){

      $conn = self::getConnection();
      $result = sqlsrv_query($conn, "exec $stmt");

      echo '
      {
        "Customers": {
        "Customer": [';
      $counter = 0;
      while($customer = sqlsrv_fetch_object($result)) {

        if($counter !== 0){
          echo ",";
        }
        $counter++;

        $row = [
          'Firstname' => $customer->Firstname,
          'Lastname' => $customer->Lastname,
           ...
        ];

        echo json_encode($row);
        unset($row);
        unset($customer);
      }

      echo ']
        }
      }';

      @sqlsrv_free_stmt($result);
      @sqlsrv_close($conn);

    }, 200, $headers);
}

此代码的目的是在浏览器上将数据流传输为JSON格式而不将数据存储在任何变量中,这将导致“内存不足”错误。

我设法将700MB的JSON数据流式传输到浏览器而没有任何错误。使用此代码,您将永远不会遇到“内存不足”错误。

最好的测试方法是使用CURL访问您的API并将数据下载到JSON文件。如果在浏览器上打开,由于浏览器无法处理大数据,它将冻结屏幕。