2016-04-25 8 views
0

最近、Laravelのテスト用にsqLiteインメモリデータベースと組み合わせてFakerを使用しています。私のモデルにはファクトリと最初の変数を除くすべてのものがあります。テーブルの主キーとなる)が正しく設定されます。Laravel 5/Faker - 工場データの変更

はのは、さらに、私が指してる変数は工場で以下のルールを使用して説明しましょう:

'kvk' => strval($faker->randomNumber(9)), 

だから、9桁の数字を含む文字列になる必要があります。今、次のステップは、私のコントローラテストから工場を呼んでいると私はまた、外部キー参照として私の会社からこの「KVK」変数を使用する別のユーザーモデルがあります:

$this->_company = factory(Company::class)->create([ 'address_id' => $this->_address->id ]); 
$this->_user = factory(User::class)->create([ 'kvk' => $this->_company->kvk ]); 

をしかし、私は、このエコー$を置くとき - > _会社 - > kvk;その間に、「kvkが1に設定されていることがわかります。これは私が工場に入れたルールのために可能ではないはずです。

最後に、ユーザーがテストでセッションを嘲笑するために使用され、私は次のチェックを使用してアドレスを編集する権限を持っている必要があり天気を確認するためにも使用されています

$user = Auth::user(); 
$company = Company::where('kvk', $user->kvk)->first(); 
$address = Address::whereId($id)->first(); 

if($company->address_id != $address->id) 
{ 
    return abort(403); 
} 

だから、最初、私は現在の取得(上記の作成されたユーザーである必要があります。会社 - > kvkを外部キー参照として使用していたためです)しかし、保存した会社をログに出力すると、kvkは9桁の文字列に設定されているように見えます。

私は本当に私の指を置くことができませんなぜ最初にkvkが1に設定され、その後私のテストでそれはすべき完全にうまくいくようですが、間違った参照が私のユーザに設定されているので、適切な会社を見つけることはできません。あなたはこれの理由が何であるか考えていますか?私も工場で作成中に 'kvk'を明示的に設定しようとしましたが、これもうまく動作せず、出力1を残します。

答えて

0

Laravelのソースに潜入した後、私はモデル。モデルでプライマリキー属性を設定していましたが、auto incrementブール値をfalseに設定するのを忘れました。これにより、私のモデルはデータベースに保存されるたびに、主キーを自動インクリメント整数にキャストしました。これは問題を解決しました。

関連する問題