2017-08-24 12 views
2

私は以下の規則に従ってユーザー入力を受け取りました。複数の行が挿入され、1つの配列ループに挿入されます

public function rules() 
    { 
     return [ 
      'phone_number' => 'required|array', 
      'amount' => 'required|string|max:4', 
      'phone_number_debit' => 'required|string|max:15', 
     ]; 
    } 

データをTransactionに保存します。 phone_numberの場合、配列は1つの値または複数の値を持つことができます。 foreachループのために残すように。

これは私が達成したいもので、配列のレコード数で決まる異なる行を保存します。

$transaction = new Trasaction(); 
$transaction->phone_number = $req->phone_number; //Value in the array 
$transaction->amount = $req->amount; 
$transaction->phone_number_debit = $req->phone_number_debit; 
$transaction->save(); 

レコードに応じて異なるレコードをphone_number配列に保存します。

しかし、私はこれを達成する方法を考えることができません。

誰でも?

+0

? –

+0

@IanRodriguesこれはどのように達成するのですか?配列は他の配列と同じ要求になります。 –

+0

子テーブルを作成してみませんか? 1つの取引には多くの電話番号があります。それは管理しやすくなります。 – aynber

答えて

1

これを行うには多くの方法は一言で言えば、あります

collect(request('phone_number'))->each(function ($phone) use ($req) { 
    $transaction = new Trasaction(); 
    $transaction->phone_number = $phone; // element of the array 
    $transaction->amount = $req->amount; 
    $transaction->phone_number_debit = $req->phone_number_debit; 
    $transaction->save(); 
}); 

TL; DR

一対多のリレーションシップ

より良いを得るためにコードの場合、one-to-manyの関係を作成してtransaction_phonesテーブルを作成できます。

あなたがTransactionPhoneモデルを作成し、追加します。この:

public function transaction() 
{ 
    return $this->belongsTo(Transaction::class); 
} 

TransactionPhone移行:

public function phones() 
{ 
    return $this->hasMany(TransactionPhone::class); 
} 

public function addPhone($phone) 
{ 
    return $this->phones()->create(['phone_number' => $phone]); 
} 
:あなたは逆があるでしょう、あなたの Transactionモデルで

Schema::create('transaction_phones', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('transaction_id'); 
    $table->string('phone_number'); 
    $table->timestamps(); 
}); 

あなたの中でコントローラ:

$transaction = Trasaction::create(request()->only('amount', 'phone_number_debit')); 

collect(request('phone_number'))->each(function ($phone) use ($transaction) { 
    $transaction->addPhone($phone); 
}); 

この回答がお役に立てば幸いです。

1

これを試してみてください。

$data = request(['amount', 'phone_number', 'phone_number_debit']); 

foreach($data['phone_number'] as $phone_number) { 
    Trasaction::create([ 
     'amount' => $data['amout'], 
     'phone_number' => $phone_number, 
     'phone_number_debit' => $data['phone_number_debit'] 
    ]); 
} 

あなたは、このように充填可能なプロパティに設定したモーダルあなたTrasactionに確認してください:あなたは、各 `phone_number`要素のエントリを作成することができ

class Trasaction extends Model 
{ 
    protected $fillable = ['amount', 'phone_number', 'phone_number_debit']; 
} 
関連する問題