vendredi 27 novembre 2015

Laravel 5.1 suggested relationship setup

I am building a timesheet system and have setup a model for timesheets. Timesheet can have many rows - for example when I add a timesheet, I can add many days (rows) to the timesheet.

I want to be able to sync rows when a timesheet gets saved. For example, new rows will be added to the database, missing rows from the given array will be removed from the database.

I understand I can use sync method which works like this, however, I do not think I need a belongsToMany relationship. Currently I have my row relationship setup as a hasMany. The timesheet model looks like this:

<?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');
    }

}

The row_timesheet model looks like this:

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;

What do I need to do in order to make something like this work:

$this->timesheet->find($id)->row()->sync($data);

Thanks in advance.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire