在 Laravel 中处理批量分配中的附加字段的最佳方法?
Best way to handle additional fields in mass assignment in Laravel?
App\Models\Venue:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Venue extends Model
{
use HasFactory;
protected $fillable = ['title', 'user_id', 'category_id', 'phone', 'address', 'content'];
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function category()
{
return $this->belongsTo(Category::class, 'category_id');
}
public function city()
{
return $this->belongsTo(City::class, 'city_id');
}
public function features()
{
return $this->belongsToMany(Feature::class, 'venue_feature');
}
}
StoreVenueRequest(规则部分):
public function rules()
{
return [
'category_id' => 'required|integer',
'title' => 'required|min:3',
'city' => 'required|integer',
'address' => 'required',
'phone' => 'nullable|integer',
'email' => 'nullable|email',
'content' => 'required|min:10',
'features' => 'required|min:3'
];
}
VenueController - store() 方法:
public function store(StoreVenueRequest $request)
{
$venue = new Venue();
$validated = $request->validated();
$validated['user_id'] = auth()->id();
$venue->create($validated);
dd($venue);
}
代码运行完美,但我不确定这是最好的方法。有没有办法避免这两行,主要是第二行:
$validated = $request->validated();
$validated['user_id'] = auth()->id();
我唯一能想到的是表单中的隐藏输入字段和经过身份验证的用户 ID。我正在寻找最好的方法。
您可以将数组与 $validated
数组合并:
Venue::create($validated + ['user_id' => auth()->id()]);
这与将其移动到$validated
的赋值相同:
$validated = $request->validated() + ['user_id' => auth()->id()];
Venue::create($validated);
如果您希望通过批量赋值来完成此操作,那么在此之前或此时您必须以某种方式合并数组。否则,您将设置数组的各个元素,就像您目前正在做的那样。
App\Models\Venue:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Venue extends Model
{
use HasFactory;
protected $fillable = ['title', 'user_id', 'category_id', 'phone', 'address', 'content'];
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function category()
{
return $this->belongsTo(Category::class, 'category_id');
}
public function city()
{
return $this->belongsTo(City::class, 'city_id');
}
public function features()
{
return $this->belongsToMany(Feature::class, 'venue_feature');
}
}
StoreVenueRequest(规则部分):
public function rules()
{
return [
'category_id' => 'required|integer',
'title' => 'required|min:3',
'city' => 'required|integer',
'address' => 'required',
'phone' => 'nullable|integer',
'email' => 'nullable|email',
'content' => 'required|min:10',
'features' => 'required|min:3'
];
}
VenueController - store() 方法:
public function store(StoreVenueRequest $request)
{
$venue = new Venue();
$validated = $request->validated();
$validated['user_id'] = auth()->id();
$venue->create($validated);
dd($venue);
}
代码运行完美,但我不确定这是最好的方法。有没有办法避免这两行,主要是第二行:
$validated = $request->validated();
$validated['user_id'] = auth()->id();
我唯一能想到的是表单中的隐藏输入字段和经过身份验证的用户 ID。我正在寻找最好的方法。
您可以将数组与 $validated
数组合并:
Venue::create($validated + ['user_id' => auth()->id()]);
这与将其移动到$validated
的赋值相同:
$validated = $request->validated() + ['user_id' => auth()->id()];
Venue::create($validated);
如果您希望通过批量赋值来完成此操作,那么在此之前或此时您必须以某种方式合并数组。否则,您将设置数组的各个元素,就像您目前正在做的那样。