如何用Eloquent(Laravel)调用存储过程?

时间:2017-06-04 13:29:44

标签: php mysql laravel stored-procedures eloquent

文档中没有提到如何使用Eloquent语法在laravel中调用MYSQL中的存储过程的标准过程。

我的意思是有任何方法可以借助像

这样的雄辩语法来调用mysql中的存储过程
$result = StoredProcedures::my_custom_procedure(param1, param2);
return view('welcome')->with('result',$result);

有没有办法用纯粹雄辩的语法(纯粹雄辩的方式)从存储过程中调用和获取结果。

感谢。非常鼓励小例子。

3 个答案:

答案 0 :(得分:2)

您无法使用eloquent调用存储过程。但是,您可以使用以下样式的查询构建器方法。

首先在控制器文件或要调用存储过程的文件中导入以下命名空间。

use Illuminate\Support\Facades\DB;
use Doctrine\DBAL\Driver\PDOConnection;

然后你可以调用下面的存储过程,

$queryResult = $db->prepare('call searchAttendance(?,?,?,?,?)'); 
$queryResult->bindParam(1, $start_date); 
$queryResult->bindParam(2, $end_date); 
$queryResult->bindParam(3, $nurseRoles,PDOConnection::PARAM_STR); 
$queryResult->bindParam(4, $leaveTypesDayOffIds,PDOConnection::PARAM_STR); 
$queryResult->bindParam(5, $leaveTypesVactionIds,PDOConnection::PARAM_STR); 
$queryResult->execute(); 
$results = $queryResult->fetchAll(PDOConnection::FETCH_ASSOC); 
$queryResult->closeCursor(); 
return $results;

参考:Click here

答案 1 :(得分:0)

没有Facade,因为一个简单的解决方案是使用原始SQL查询

$result = DB::select('my_custom_procedure(?, ?)', [1,2]);

答案 2 :(得分:0)

正如大家所提到的,你不能用Eloquent语法在Laravel中调用存储过程。 You can transfer the result of your query to a collection将为您提供所有收集功能。

$queryResult = DB::select('call my_custom_procedure(?, ?)', [1,2]);

$result = collect($queryResult);

return view('welcome')->with('result',$result);