Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩的拉拉维尔,克隆实体_Php_Laravel_Eloquent - Fatal编程技术网

Php 雄辩的拉拉维尔,克隆实体

Php 雄辩的拉拉维尔,克隆实体,php,laravel,eloquent,Php,Laravel,Eloquent,我正试图克隆一个实体和一对一的关系。出于某种原因,$entity->hasManyRelation()不是一个函数:/ 这是我的密码 $clonedWorksheet = Worksheet::where('id', $id)->get()->load('records'); $worksheet = new Worksheet; $worksheet->employee_id = $request->employee; $worksheet->workday

我正试图克隆一个实体和一对一的关系。出于某种原因,$entity->hasManyRelation()不是一个函数:/

这是我的密码

$clonedWorksheet = Worksheet::where('id', $id)->get()->load('records');

$worksheet = new Worksheet;

$worksheet->employee_id = $request->employee;
$worksheet->workday = $request->workday;

$worksheet->save();

foreach ($clonedWorksheet->records() as $clonedRecord) {
  $record = new Record;

  $record->from = $clonedRecord->from;
  $record->to = $clonedRecord->to;
  $record->estimated = $clonedRecord->estimated;
  $record->place_id = $clonedRecord->place_id;
  $record->worksheet_id = $worksheet->id;
  $record->vehicle_id = $clonedRecord->vehicle_id;
  $record->tool_id = $clonedRecord->tool_id;
  $record->job_id = $clonedRecord->job_id;
  $record->comment = $clonedRecord->comment;

  $worksheet->records()->save($record);
}
还有其他想法吗,或者我做错了什么?

问题就在这里

foreach ($clonedWorksheet->records() as $clonedRecord) {
records()是模型中执行数据库查询的方法。返回是一个雄辩的关系对象。你想要:

foreach($clonedWorksheet->records as $clonedRecord) {

模型有一个,这将减少你的循环体相当多,只是:

$record = $cloneRecord->replicate();
$record->worksheet_id = $worksheet->id;
$record->save();

从foreach中的记录中删除
()
,这样它将访问实际记录而不是函数$工作表->记录()->保存($record);甚至用克隆魔法的方法啊,我找到了。我使用get()代替first(),get返回一个集合。谢谢你们,tho.)您需要先将
clonedsheet
放在foreach next put relations上。对于此功能,您可能还需要查看
->replicate()
方法,因为它将为您节省大量的行数。至于最初的问题,我相信已经得到了回答。
$record = $cloneRecord->replicate();
$record->worksheet_id = $worksheet->id;
$record->save();