[英]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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.