2016-08-08 20 views
0

私はEloquent用にLaravelのSQL Serverドライバを使用しており、データベースへの読み書きを試みています。Laravel SQL Server挿入エラー

データベースからデータを正常に読み取ることができました。

データベースクライアント(Navicat)に直接クエリを貼り付けると、データベースに保存することができます。

しかし、私がEloquent経由でデータを挿入しようとすると、エラーが発生します。

//returns valid results 
$results = DB::connection('next')->table('CMS_Tree')->get(); 

//throws exception 
$sql = "INSERT INTO CMS_Tree (
      [NodeAliasPath], [NodeName], [NodeAlias], [NodeClassID], [NodeLevel], [NodeSiteID], [NodeGUID] 
     ) VALUES (
      '/Home', 'Home', 'Home', 1095, 1, 1, '17B28018-C4DC-4896-ADAC-29F1E35B69BA' 
     )"; 

$result = DB::connection('next')->statement($sql); 

例外メッセージ:そのエラーの

General error: 1934 General SQL Server error: Check messages from the SQL Server [1934] (severity 16) [(null)]

私の研究は、私がデータを送信しています方法に問題がある可能性が示唆が、私はこれをさらに簡素化する方法がわかりませんよ。


スキーマ:

enter image description here

+0

テーブル構造を提供できますか? –

答えて

0

私は2つの部分でこれを解決することができました。

まず、クライアントが自分のSQLとともにバックグラウンドで送信していた「SET」パラメータをサーバーにデバッグする必要がありました。隠されたSETパラメータは、クライアントが私のPHPコードからではなく、なぜか機能している理由です。この答えは、あなたが追加する必要があるパラメータを設定するかを決定する方法を示しています。

SQL Server error 1934 occurs on INSERT to table with computed column PHP/PDO

第二に、私は挿入コマンドを実行する前に、私は手動でこれらのパラメータを「SET」に合格する必要があります。このコードブロックを1回または複数回挿入する前に実行する必要があります。私の場合は、次のようになります。

$pdo = DB::connection('my-db-config-key')->getPdo(); 
$pdo->exec('SET ANSI_WARNINGS ON'); 
$pdo->exec('SET ANSI_PADDING ON'); 
$pdo->exec('SET ANSI_NULLS ON'); 
$pdo->exec('SET ARITHABORT ON'); 
$pdo->exec('SET QUOTED_IDENTIFIER ON'); 
$pdo->exec('SET ANSI_NULL_DFLT_ON ON'); 
$pdo->exec('SET CONCAT_NULL_YIELDS_NULL ON'); 
$pdo->exec('SET XACT_ABORT ON'); 

//run one or multiple inserts here