在 Laravel 项目中我这样做:
$childValues = [1,3,4,5];
$model = MyModel::create(['value'=>1.2]);
$modelChildValues=[];
foreach($childValues as $value){
$modelChildValues[]=ModelChild::create(['parent_id'=>$model->id,'value'=>$value]);
}
$reource = new MyModelResource($model);
我有一个资源可以序列化我的模型:
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class MyModelResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'value'=>$this->value,
'children' => ModelChildResource::collection($this->children)
];
}
}
还有一个给孩子的:
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class ModelChildResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'value'=>$this->value,
];
}
}
如您所见,我一次性创建了一个带有子元素的模型,然后创建了一个资源。
MyModel
模型是:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
use HasFactory;
protected function children()
{
return $this->hasMany(ModelChild::class,'child_id','id');
}
}
同样是
ModelChild
一:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
use HasFactory;
protected function mymodel()
{
return $this->belongsTo(Model::class,'id','child_id');
}
}
我的问题是如何使用
$model
来水合 $modelChildValues
中的模型,这样我就可以避免选择插入的模型?
您可以使用
setRelation
等方法手动附加一个或多个模型
$childValues = [1,3,4,5];
$model = MyModel::create(['value'=>1.2]);
$children = collect([]);
foreach($childValues as $value) {
// the relation field will be auto filled
$children->push($model->children()->create(['value' => $value]));
}
$model->setRelation('children', $children);
$reource = new MyModelResource($model);