L. *_*llo 5 php laravel eloquent laravel-5
我有两个 Model 类,它们具有像这样的 oneToMany 关系
应用\汽车class Car extends Model
{
public $timestamps = true;
protected $fillable = [
'name',
'price'
];
public function parts ()
{
return $this->hasMany('App\Part');
}
}
Run Code Online (Sandbox Code Playgroud)
应用\部分
class Part extends Model
{
public $timestamps = false;
protected $fillable = [
'name',
'price'
];
public function car ()
{
return $this->belongsTo('App\Car');
}
}
Run Code Online (Sandbox Code Playgroud)
客户端使用 JSON 发出 POST 请求,该 JSON 表示带有嵌套零件数组的 Car
{
"name": "Fiat Punto",
"price": 15000,
"parts": [
{
"name": "wheel",
"price": 300
},
{
"name": "engine",
"price": 5000
}
]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法保存 Car 模型并一键创建关系?
我试图在我的控制器中这样做,但它不起作用:
...
public function store (Request $request) {
$input = $request->all();
Car::create($input);
}
...
Run Code Online (Sandbox Code Playgroud)
PS:我已经知道如何使用foreachor完成任务array_reduce,只是想知道 laravel 是否可以为我完成
这是我现在实现控制器的方式:
...
public function store (Request $request) {
$input = $request->all();
$car = Car::create($input);
$parts = array_reduce(
$input['parts'],
function ($carry, $item) {
array_push($carry, new Part($item));
return $carry;
},
[]
);
$car->parts()->saveMany($parts);
}
...
Run Code Online (Sandbox Code Playgroud)
欢迎任何改进
我不\xc2\xb4t 认为有一种方法可以解决您需要创建请求对象中定义的每个 App\\Part 模型实例这一事实。因此,在某些时候您必须迭代请求对象中的这些项目,这意味着您(至少)有两个选择。这些都在这里描述。
\n\n顺便说一句,我认为在这种情况下,最好使用 foreach 循环作为第一个选项:
\n\nforeach ($request->input(\'parts\') as $item) {\n $car->parts()->save(new Part($item));\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果您首先选择将它们存储在数组中的第二种选择,那么我认为 array_map 是更合适的使用方法(因为没有实际的“减少”发生):
\n\n$parts = array_map(function($part) {\n return new App\\Part($part);\n}, $request->input(\'parts\'));\n\n$car->parts()-saveMany($parts);\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:根据 @TomasKim 的建议,只有 2 个查询 - 一个用于汽车模型,另一个用于零件模型:
\n\n$parts = array_map(function($part) {\n return [...$part, \'car_id\' => $car->id];\n}, $input[\'parts\'])\n\nDB::table(\'parts\')->insert($parts);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3809 次 |
| 最近记录: |