我如何 return Laravel DB::insert 中的 OUTPUT 子句
How do I return my OUTPUT clause in Laravel DB::insert
我正在使用 Laravel 和 sqlsrv,连接到 SQL Server 2016,在我尝试在插入查询中使用输出子句之前一切正常。
查询类似于
INSERT INTO TABLE(Columns) OUTPUT INSERTED.MyDesiredReturnColumn VALUES(Value)
这在 SQL 服务器中运行完美,并且 return 获得了所需的值,但是使用 Laravel 的 DB::insert 功能它只是 returning a 1(成功插入)
我有一个我现在不想使用的解决方法,使用 CreatedOn 字段 return 最近创建的行,但这有潜在的问题。
更新:我试图检索的字段是在 SQL 中创建的唯一标识符字段 (guid),而不是来自 Laravel 端
在尝试@PrathameshPalav 的建议使用 Eloquent 创建模型后,值被正确地插入到数据库中,但它仍然没有 returning uniqueidentifier。
$inserted = MyModel::create($information);
print "inserted id is " . $inserted->MyModelId;
正在打印"inserted id is "
这是我的模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
//
protected $table = 'MyModelBase';
protected $primaryKey = 'MyModelId';
public $incrementing = false;
protected $keyType = "string";
public $timestamps = false;
protected $fillable = ['field1', 'field2', 'etc'];
}
任何想法都会很有帮助。
您可以为此目的使用 Eloquent ORM:
$insertedObject = ModelName::create($input_array);
它将return 插入模型对象作为响应。或者,如果您只想插入记录 ID,则使用
DB::table($tablename)->insertGetId($input_array);
是的,当你使用 insert 时它会 return 一个布尔值。您可以使用 insertGetId
来获取 ID。
If the table has an auto-incrementing id, use the insertGetId method
to insert a record and then retrieve the ID:
$data = [....]; // data that will be inserted
$id = DB::table('xxx')->insertGetId($data);
我解决这个问题的方法是合并一个 Eloquent 模型(正如@PrathameshPalav 所指出的),然后(松散地)遵循本教程 https://danielkoch.work/log/laravels-eloquent-guids.html
具体这部分
public static function boot() {
parent::boot();
// Hook when a model is created
static::creating(function ($model) {
// Select a new ID
$result = DB::select( DB::raw('Select NewID() NewUUID') );
$model->{$model->getKeyName()} = $result[0]->NewUUID;
});
}
之后,我将我定义的主键添加到$fillable
数组中并测试,它可以工作=)
谢谢两位的帮助!
我正在使用 Laravel 和 sqlsrv,连接到 SQL Server 2016,在我尝试在插入查询中使用输出子句之前一切正常。
查询类似于
INSERT INTO TABLE(Columns) OUTPUT INSERTED.MyDesiredReturnColumn VALUES(Value)
这在 SQL 服务器中运行完美,并且 return 获得了所需的值,但是使用 Laravel 的 DB::insert 功能它只是 returning a 1(成功插入)
我有一个我现在不想使用的解决方法,使用 CreatedOn 字段 return 最近创建的行,但这有潜在的问题。
更新:我试图检索的字段是在 SQL 中创建的唯一标识符字段 (guid),而不是来自 Laravel 端
在尝试@PrathameshPalav 的建议使用 Eloquent 创建模型后,值被正确地插入到数据库中,但它仍然没有 returning uniqueidentifier。
$inserted = MyModel::create($information);
print "inserted id is " . $inserted->MyModelId;
正在打印"inserted id is "
这是我的模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
//
protected $table = 'MyModelBase';
protected $primaryKey = 'MyModelId';
public $incrementing = false;
protected $keyType = "string";
public $timestamps = false;
protected $fillable = ['field1', 'field2', 'etc'];
}
任何想法都会很有帮助。
您可以为此目的使用 Eloquent ORM:
$insertedObject = ModelName::create($input_array);
它将return 插入模型对象作为响应。或者,如果您只想插入记录 ID,则使用
DB::table($tablename)->insertGetId($input_array);
是的,当你使用 insert 时它会 return 一个布尔值。您可以使用 insertGetId
来获取 ID。
If the table has an auto-incrementing id, use the insertGetId method to insert a record and then retrieve the ID:
$data = [....]; // data that will be inserted
$id = DB::table('xxx')->insertGetId($data);
我解决这个问题的方法是合并一个 Eloquent 模型(正如@PrathameshPalav 所指出的),然后(松散地)遵循本教程 https://danielkoch.work/log/laravels-eloquent-guids.html
具体这部分
public static function boot() {
parent::boot();
// Hook when a model is created
static::creating(function ($model) {
// Select a new ID
$result = DB::select( DB::raw('Select NewID() NewUUID') );
$model->{$model->getKeyName()} = $result[0]->NewUUID;
});
}
之后,我将我定义的主键添加到$fillable
数组中并测试,它可以工作=)
谢谢两位的帮助!