簡體   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