繁体   English   中英

数据透视表中的laravel / eloquent mutators / accessors

[英]laravel/eloquent mutators/accessors in a pivot table

好吧,我认为标题解释了大部分内容。 让我们进入它吧!

空白型号:

class Blank extends Eloquent 
{

    protected $table = 'blanks';

    protected $softDelete = true;

    protected $hidden = array();

    /**
     * Get associated jobs.
     *
     * @return mixed
     */
    public function jobs()
    {
        return $this->belongsToMany('Job')->withPivot('status', 'inventory', 'sizes', 'mill', 'po', 'location', 'ordered_at', 'expected_at', 'note')->withTimestamps();
    }

    /**
     * Blanks sizes accessor
     *
     * @return object
     */
    public function getSizesAttribute($value)
    {
        return json_decode($this->pivot->sizes);
    }

    /**
     * Blanks sizes mutator
     *
     * @return void
     */
    public function setSizesAttribute($value)
    {
        $this->pivot->attributes['sizes'] = json_encode($this->pivot->sizes);
    }

}

工作模式:

class Job extends Eloquent
{

    protected $table = 'jobs';

    protected $softDelete = true;

    protected $hidden = array();

    /**
     * Get associated blank.
     *
     * @return mixed
     */
    public function blanks()
    {
        return $this->belongsToMany('Blank')->withPivot('status', 'inventory', 'sizes', 'mill', 'po', 'location', 'ordered_at', 'expected_at', 'note')->withTimestamps();
    }

    /**
     * Blanks sizes accessor
     *
     * @return object
     */
    public function getSizesAttribute($value)
    {
        return json_decode($this->pivot->sizes);
    }

    /**
     * Blanks sizes mutator
     *
     * @return void
     */
    public function setSizesAttribute($value)
    {
        $this->pivot->attributes['sizes'] = json_encode($this->pivot->sizes);
    }
}

附加代码:

$job->blanks()->attach($blank->id,[
    'status'      => Input::get('status'),
    'inventory'   => Input::get('inventory'),
    //'sizes'       => $sizes,
    'mill'        => Input::get('mill'),
    'po'          => Input::get('po'),
    'location'    => Input::get('location'),
    'ordered_at'  => Carbon::parse(Input::get('ordered_at'))->format('Y-m-d H:i:s'),
    'expected_at' => Carbon::parse(Input::get('expected_at'))->format('Y-m-d H:i:s'),
    'note'        => Input::get('note'),
]);

根本没有调用变异器..任何想法?

似乎通过::attach()方法无法做到这一点。

也许您想使用' 定义自定义枢轴模型 '

public function newPivot(Model $parent, array $attributes, $table, $exists)
{
    return new YourCustomPivot($parent, $attributes, $table, $exists);
}

因此,您可以使用mutator定义自己的pivot类:

class BlankJobPivot extends Eloquent
{
    // ...

    /**
     * Blanks sizes accessor
     *
     * @return object
     */
    public function getSizesAttribute($value)
    {
        return json_decode($value);
    }

    /**
     * Blanks sizes mutator
     *
     * @return void
     */
    public function setSizesAttribute($value)
    {
        $this->attributes['sizes'] = json_encode($value);
        return $value; // return for multiple assignment statement:  $arr = $pivot->sizes = array(12, 23, 34);
    }
}

而且你可以使用getter:

$blank->jobs[$i]->pivot->sizes; // - ::getSizesAttribute() will called ( I hope :) )

也许你会找到一种通过setSizesAttribute mutator save / attachsetSizesAttribute

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM