我在mysql中创建了一个名为'Insertusers'的存储过程,其中包含8个参数。
现在我想使用我的模型调用此过程,并使用此过程在表中插入值。
这是我的模型代码:
<?php
class Insertuser extends Eloquent {
protected $guarded = array();
public static function storedProcedureCall() {
return DB::statement('Insertusers');
}
public static $rules = array();
}
?>
这是我的控制器代码:
public function createUser() {
$clan = new Insertuser;
$clan->clanname = Input::get('clanname');
$clan->description = Input::get('tbx_new_clan_Des');
if (Input::get('chk_new_clan_Status')) {
$clan->active = true;
} else {
$clan->active = false;
}
if (Input::get('chk_new_clan_Incoming')) {
$clan->allow_incoming = true;
} else {
$clan->allow_incoming = false;
}
if (Input::get('chk_new_clan_key')) {
$clan->clan_key = Input::get('tbx_new_clan_key');
}
$clan->created_by = Session::get('userid');
$clan->last_updated_by = Session::get('userid');
$clan->DOMType=1;
$clan->save();
}
当我尝试创建用户时,我收到以下错误:
SQLSTATE [42S02]:找不到基表或视图。
请帮帮我。 感谢。
答案 0 :(得分:1)
我得到了解决方案:
这是我在控制器中所做的:
$clan_key;
$clanname=Input::get('clanname');
$description=Input::get('tbx_new_clan_Des');
if (Input::get('chk_new_clan_Incoming')) {
$allow_incoming = true;
} else {
$allow_incoming= false;
}
if (Input::get('chk_new_clan_key')) {
$clan_key = Input::get('tbx_new_clan_key');
}
$created_by= Session::get('userid');
$last_updated_by = Session::get('userid');
if (Input::get('chk_new_clan_Status')) {
$active = true;
} else {
$active = false;
}
$DOMType=1;
Clan::storedProcedureCall($clanname, $description, $allow_incoming, $clan_key,$created_by, $last_updated_by, $active, $DOMType);
这是我的模特:
class Clan extends Eloquent {
protected $table = 'clans';
public static function storedProcedureCall($clanname,$description,$allow_incoming,$clan_key,$created_by,$last_updated_by,$active,$DOMType) {
return DB::select('call Insertusers(?,?,?,?,?,?,?,?)',array($clanname,$description,$allow_incoming,$clan_key,$created_by,$last_updated_by,$active,$DOMType));
}
}
答案 1 :(得分:1)
MSSQL要求程序中的变量为DECLAREd,并且人们使用@Variable语法(DECLARE @TEXT VARCHAR(25)='text')。此外,MS允许在过程中的任何块内声明,不像mySQL需要顶部的所有DECLARE。
虽然在命令行上很好,但我觉得在mySQL中的存储过程中使用“set = @variable”是有风险的。跨范围边界没有范围和变量。这与声明没有“var”前缀的JavaScript中的变量类似,后者是全局命名空间并创建意外的冲突和覆盖。
我希望mySQL的优秀人员能够在存储过程中的各个块级别允许DECLARE @Variable。注意@(在标志处)。 @符号前缀有助于将变量名称与表列名分开 - 因为它们通常是相同的。当然,总是可以添加“v”或“l_”前缀,但是@符号是一种方便而简洁的方法,可以使变量名称与您可能从中提取数据的列匹配而不会破坏它。
MySQL是存储过程的新手,他们在第一个版本上做得很好。很高兴看到他们在这里采用它的形式,并观察语言服务器方面的成熟。
答案 2 :(得分:0)
不,表名是用户,InsertUsers是程序的名称。
在您发布的代码中,您还没有告诉Laravel。试试这个:
class Insertuser extends Eloquent {
protected $table = 'users';