Laravel 5.1建议关系设置

时间:2015-11-27 13:03:42

标签: php laravel laravel-5

我正在建立一个时间表系统,并为时间表设置了一个模型。时间表可以有很多行 - 例如,当我添加时间表时,我可以在时间表中添加许多天(行)。

我希望能够在保存时间表时同步行。例如,新行将添加到数据库中,从数据库中删除给定数组中缺少的行。

我知道我可以使用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);

提前致谢。

1 个答案:

答案 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