我正在建立一个时间表系统,并为时间表设置了一个模型。时间表可以有很多行 - 例如,当我添加时间表时,我可以在时间表中添加许多天(行)。
我希望能够在保存时间表时同步行。例如,新行将添加到数据库中,从数据库中删除给定数组中缺少的行。
我知道我可以使用sync
这样的方法,但是,我认为我不需要belongsToMany
关系。目前,我将row
关系设置为hasMany
。时间表模型如下所示:
<?php
namespace App\Models\Timesheet;
use Illuminate\Database\Eloquent\Model;
class Timesheet extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'timesheet';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['user_id', 'week', 'year', 'token', 'total_hours'];
/**
* Define that we want to include timestamps.
*
* @var boolean
*/
public $timestamps = true;
/**
* Boot the model.
*
*/
public static function boot()
{
parent::boot();
static::deleting(function($timesheet)
{
$timesheet->row()->delete();
});
}
/**
* The rows that belong to the timesheet.
*
* @return Object
*/
public function row()
{
return $this->hasMany('App\Models\Timesheet\RowTimesheet');
}
}
row_timesheet模型如下所示:
namespace App\Models\Timesheet;
use Illuminate\Database\Eloquent\Model;
class RowTimesheet extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'row_timesheet';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['timesheet_id', 'activity_category', 'description', 'eri_number', 'ewn_number'];
/**
* Define that we want to include timestamps.
*
* @var boolean
*/
public $timestamps = true;
为了做出类似这样的工作,我需要做些什么:
$this->timesheet->find($id)->row()->sync($data);
提前致谢。
答案 0 :(得分:0)
我相信'sync'方法适用于'belongsTomany'关系。 你所拥有的是'hasMany'关系,因为你需要做类似下面的事情
对hasMany关系使用'save'方法而不是'sync'
$data = new App\Comment(['message' => 'A new comment.']);
$this->timesheet->find($id)->row()->save($data); // saves single row sheet object for a timesheet
$this->timesheet->find($id)->row()->saveMany($multipleData); // saves multiple row sheet objects for a timesheet