繁体   English   中英

如何在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 Server中完美地工作,并返回所需的值,但是使用Laravel的DB :: insert功能它只返回1(成功插入)

我有一个我现在不想拥有的解决方法,使用CreatedOn字段返回最近创建的行,但这有潜在的问题。

更新:我试图检索的字段是一个在SQL中创建的uniqueidentifier字段(guid),而不是来自Laravel端

尝试@ PrathameshPalav建议使用Eloquent模型创建后,值正在正确插入数据库,但它仍然没有返回uniqueidentifier。

$inserted = MyModel::create($information);
print "inserted id is " . $inserted->MyModelId;

这是打印“插入ID是”

这是我的模型:

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);

它将返回插入的模型对象作为响应。 或者,如果您只想插入记录ID,则使用

DB::table($tablename)->insertGetId($input_array);

我解决这个问题的方法是通过合并一个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数组并进行测试,它的工作原理=)

谢谢你们的帮助!

是的,当你使用插入时,它会返回一个bool。 您可以使用insertGetId来获取id。

如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索ID:

$data = [....]; // data that will be inserted
$id = DB::table('xxx')->insertGetId($data); 

更多信息: https//laravel.com/docs/5.5/queries#inserts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM