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`
【问题讨论】:
试试formAfterSave
octobercms.com/docs/api#formaftersave
更新了我的答案,请检查一次。
【参考方案1】:
我试过这个code
和its 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 更新其他模型的主要内容,如果未能解决你的问题,请参考以下文章