我的用户输入遵循以下规则;
public function rules()
{
return [
'phone_number' => 'required|array',
'amount' => 'required|string|max:4',
'phone_number_debit' => 'required|string|max:15',
];
}
我想将数据保存在模型Transaction
中。对于phone_number,它是一个可以有一个值或多个值的数组。所以留下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 :(得分:2)
试试这个:
$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
模式设置为可填充属性,如下所示:
class Trasaction extends Model
{
protected $fillable = ['amount', 'phone_number', 'phone_number_debit'];
}
答案 1 :(得分: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
一对多关系
为了获得更好的代码,您可以创建transaction_phones
表,创建one-to-many
关系。
您将创建一个TransactionPhone
模型并添加:
public function transaction()
{
return $this->belongsTo(Transaction::class);
}
TransactionPhone
迁移:
Schema::create('transaction_phones', function (Blueprint $table) {
$table->increments('id');
$table->integer('transaction_id');
$table->string('phone_number');
$table->timestamps();
});
在Transaction
模型中,您将获得相反的结果:
public function phones()
{
return $this->hasMany(TransactionPhone::class);
}
public function addPhone($phone)
{
return $this->phones()->create(['phone_number' => $phone]);
}
在你的控制器中:
$transaction = Trasaction::create(request()->only('amount', 'phone_number_debit'));
collect(request('phone_number'))->each(function ($phone) use ($transaction) {
$transaction->addPhone($phone);
});
我希望这个答案可以帮到你。