我不希望laravel将查询结果格式化为数组或对象..etc。我想要的只是从数据库运行结果集,然后我将在自己的自定义代码中手动进行获取。
此刻,我运行了选择查询并将结果存储在数组中。之所以这样做,是因为结果很大,我想直接将其流式传输到API。
$result = self::$db->select('select * from customer');
如何告诉laravel返回我的查询结果集,而无需任何格式?
答案 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文件。如果在浏览器上打开,由于浏览器无法处理大数据,它将冻结屏幕。