我使用的是Laravel 5.4和MySql 5.7,PHP 5.6。 我想調用一個存儲過程(做一個SELECT查詢,加入多個表),並將結果返回給我的PHP。獲取存儲過程的結果Laravel
這裏是我試過失敗的事情:
PHP 1:
$result = DB::select('CALL rentalsAvailables_get(?, ?, ?, ?)',
array(
'p0' => Carbon::now(),
'p1' => Carbon::now()->addDays(7),
'p2' => 100,
'p3' => 2
)
);
return var_dump($result);
結果1:
{
"error": {
"message": "SQLSTATE[HY000]: General error: 2031 (SQL: CALL rentalsAvailables_get(2017-03-11 16:00:42, 2017-03-18 16:00:42, 100, 2))",
"code": "HY000",
"status_code": 500
}
}
PHP 2:
$result = DB::select('CALL rentalsAvailables_get(:p0, :p1, :p2, :p3)',
array(
'p0' => Carbon::now(),
'p1' => Carbon::now()->addDays(7),
'p2' => 100,
'p3' => 2
)
);
return var_dump($result);
結果2:
array(0) {
}
**存儲過程:**
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rentalsAvailables_get`(IN `startDate` DATETIME, IN `endDate` DATETIME, IN `maxPrice` INT(11) ZEROFILL, IN `capacity` INT(2))
NO SQL
SELECT a.rentalId, a.rentalName, a.rentalBathroom, a.rentalBedroom, a.rentalCapacity, a.rentalCover, a.rentalLat, a.rentalLong, a.rentalLocation, a.rentalStatus, a.rentalSummary, a.rentalText, a.rentalOwnerId,
b.rentalTypeId, b.rentalTypeName,
c.id as 'userId', c.name,
d.rentalPriceId, d.rentalPrice
FROM rentals as a
INNER JOIN rentalTypes as b
ON a.rentalTypeId = b.rentalTypeId
INNER JOIN users as c
ON a.rentalOwnerId = c.id
INNER JOIN rentalprice as d
ON a.rentalId = d.rentalId
WHERE a.rentalCapacity > @p3
AND a.rentalStatus = true
AND d.rentalPrice < @p2
AND d.rentalPriceStartDate <= @p0
AND d.rentalPriceEndDate >= @p1
AND a.rentalId NOT IN (
SELECT eSub.rentalId FROM unavailabilities as eSub WHERE eSub.unavailabilityStartDate >= @p0 AND eSub.unavailabilityEndDate <= @p1
)
AND a.rentalId NOT IN (
SELECT fSub.rentalId FROM rent as fSub WHERE fSub.rentStartDate >= @p0 AND fSub.rentEndDate <= @p1
)$$
DELIMITER ;
注:
我當然有檢查,我收到從結果我的查詢在調用時就像這樣:
SET @p0='2017-03-11 04:26:09.000000';
SET @p1='2017-03-17 04:26:09.000000';
SET @p2='1000';
SET @p3='2';
CALL `rentalsAvailables_get`(@p0, @p1, @p2, @p3);
有沒有人已經有這個問題? 感謝您閱讀
你確定你需要的程序後? –
我可以使用Laravel構建查詢,但是我希望將複雜查詢保留在我的數據庫中 –
目標是完全避免複雜的查詢。 –