如何从Laravel执行存储过程

时间:2015-12-28 16:27:37

标签: php sql-server laravel stored-procedures laravel-5

我需要在表单提交数据后执行存储过程。我的存储过程就像我想要的那样工作,并且我的表单正常工作。我只是不知道从laravel 5执行sp的声明。

它应该是这样的:执行my_stored_procedure。但我似乎无法在网上找到类似的东西。

12 个答案:

答案 0 :(得分:37)

尝试这样的事情

DB::select('exec my_stored_procedure("Param1", "param2",..)');

DB::select('exec my_stored_procedure(?,?,..)',array($Param1,$param2));

尝试不带参数

DB::select('EXEC my_stored_procedure')

答案 1 :(得分:9)

你也可以这样做:

DB::select("CALL my_stored_procedure()");

答案 2 :(得分:7)

Laravel 5.4

DB::select(DB::raw("exec my_stored_procedure"));

如果你想传递参数:

DB::select(DB::raw("exec my_stored_procedure :Param1, :Param2"),[
    ':Param1' => $param_1,
    ':Param2' => $param_2,
]);

答案 3 :(得分:2)

Laravel 5.5

DB::select('call myStoredProcedure("p1", "p2")');

DB::select('call myStoredProcedure(?,?)',array($p1,$p2));

没有参数

DB::select('call myStoredProcedure()')

答案 4 :(得分:1)

使用Laraval 5.6的工作代码,

DB::select('EXEC my_stored_procedure ?,?,?',['var1','var2','var3']);

答案 5 :(得分:1)

使用PHP Laravel框架运行Microsoft SQL Server存储过程(MS SQL Server)。 如果您尝试使用Laravel Model运行SP,则可以使用以下两种方法。

$submit = DB::select(" EXEC ReturnIdExample ?,?", array( $paramOne ,$paramTwo ) ); 

$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");

如果要传递Varchar参数,请使用以下命令:

$submit = DB::select(" EXEC ReturnIdExample '$paramOne', '$paramTwo' ");

如果您只是传递INT或BIGINT的参数,则此方法应该起作用,并且您可以从SP获取返回值:

$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");

执行存储过程后,值将以数组形式出现在$submit中,您需要遍历它并访问所需的列。

foreach($submit  as $row)
{

echo $row->COLUMN1;
echo $row->COLUMN2;
echo $row->COLUMN3;

}

答案 6 :(得分:1)

使用Laravel 5.6(或更高版本)的MySql

DB :: select( '呼叫sp($ id)' );

答案 7 :(得分:0)

对于版本5.5,请使用class Card(object): def __init__(self, rank, suit): self.rank = rank self.suit = suit def __eq__(self, other): return self.rank == other.rank and self.suit == other.suit def __lt__(self, other): return self.rank < other.rank hand = [Card(10, 'H'), Card(2, 'h'), Card(12, 'h'), Card(13, 'h'), Card(14, 'h')] hand_order = [c.rank for c in hand] # [10, 2, 12, 13, 14] hand_sorted = sorted(hand) hand_sorted_order = [c.rank for c in hand_sorted] # [2, 10, 12, 13, 14]

CALL

答案 8 :(得分:0)

app('db')->getPdo()->exec('exec my_stored_procedure');

答案 9 :(得分:0)

经过长时间的研究,我获得了成功

DB::connection("sqlsrv")->statement('exec Pro_Internal_Transfer_Note_post @mvoucherid='.$VMID);

答案 10 :(得分:0)

如果您的存储过程始终返回某些内容,则可以使用

DB::select("exec StoredProcedure '1','A','PARAM');

否则(如果SP没有响应)它将引发异常。在这种情况下,我建议使用

DB::statetment("exec StoredProcedure '1','A','PARAM'");

答案 11 :(得分:0)

# Real world from my Aplicaction Example Use

$result = DB::connection("sqlsrv")->statement("exec p_SaveOrderWithRelation  @cOrderID='{$order->id}', @cPaymentID='{$payment->id}', @cShiftID='{$shift->id}', @cSimple=0");
return $result;

# My PrimaryKey in Models is string type like, and i must put parametr ID like string type:

namespace App\Traits;
use Ramsey\Uuid\Uuid;
use Illuminate\Support\Str;

trait Uuids
{
    /**
     * Boot function from Laravel.
     */
    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            if (empty($model->{$model->getKeyName()})) {
                $model->{$model->getKeyName()} = Str::upper(Uuid::uuid4()->toString()); 
            }
        });
    }
    /**
     * Get the value indicating whether the IDs are incrementing.
     *
     * @return bool
     */
    public function getIncrementing()
    {
        return false;
    }
    /**
     * Get the auto-incrementing key type.
     *
     * @return string
     */
    public function getKeyType()
    {
        return 'string';
    }
}