Octobercms onSave 更新其他模型

Posted

技术标签:

【中文标题】Octobercms onSave 更新其他模型【英文标题】:Octobercms onSave update other model 【发布时间】:2018-07-10 22:39:50 【问题描述】:

我需要在保存贷款时更新模型关系中图书的status字段,但它不起作用。

我的代码

class Lending extends Model


/**
 * @var string The database table used by the model.
 */
public $table = 'ribsousa_library_lendings';

/*
 * Relations
 */
public $belongsToMany = [
    'books' => [
        'Ribsousa\Library\Models\Book',
        'table' =>  'ribsousa_library_lendings_books',
        'order'      => 'title desc'
    ]
];

public function afterSave()


    $this->book->status = 1;
    $this->book->save();



错误:

`"Indirect modification of overloaded property Ribsousa\Library\Models\Lending::$book has no effect" on line 95 of C:\wamp64\www\iepm.dev\plugins\ribsousa\library\models\Lending.php`

【问题讨论】:

试试formAfterSaveoctobercms.com/docs/api#formaftersave 更新了我的答案,请检查一次。 【参考方案1】:

我试过这个codeits working fine 你能试试这个吗?

它在我的 model which model I am saving 里面,所以当 saving is done 我是 updating related demo model's status 字段时,似乎是 its working

public $belongsTo = [
    'demo' => 'HardikSatasiya\DemoTest\Models\Demo',
    'user' => 'RainLab\User\Models\User'
];

/**
 * @var string The database table used by the model.
 */
public $table = 'hardiksatasiya_demotest_relation';

public function afterSave() 
    $this->demo->status = 1;
    $this->demo->save();

更新

您似乎更新了答案,这是关系 is Many to Many 所以现在我有no proper solution 用于一次更新多条记录 , 因为集合update方法没有生成proper query structure所以它会为collection update抛出错误。

但是我有其他解决方案,can fire multiple queries 但现在是seems working solution for your issue

你的关系是belongsToMany,所以我们需要不同的方法。

public function afterSave() 
    $this->books()->each(function($book) 
        $book->update(['status' => 1]);
        // if you get mass assign error -use this
        // $book->status = 1;
        // $book->save();

    );     

确保您的 Book 模型没有任何 afterSave 逻辑,并且如果有那么只需确保它不要更新您的父模型你的情况Lending,因为它将调用无限循环

请试试这个并告诉我们。

【讨论】:

现在我收到以下错误:Failed to mass assign status attribute of Model. 我在模型书中找到了添加的解决方案:protected $fillable = ['status']; 感谢 Hardik,帮助我! 很高兴它帮助了你,否则你也可以做$book->status = 1; $book->save(); 它也可以在没有大量分配的情况下工作:)

以上是关于Octobercms onSave 更新其他模型的主要内容,如果未能解决你的问题,请参考以下文章

OctoberCMS:在一个 API 端点中设置多个模型

OctoberCMS - 具有多对多关系的模型查询

OctoberCms - 模型过滤器字段取决于过滤器字段

我的 Octobercms 数据透视表获取模型表在我尝试添加时应获取的数据

关系限制 [ octobercms ]

我应该如何为需要引用数据透视表的表配置 Laravel / OctoberCMS 模型?