请有人澄清一下吗?我以前曾经多次使用Model Events
,但似乎我还没有尝试访问最初的"创建的"事件
例如,我有两个彼此M2M
关系的模型:
Book() public function authors()
Author() public function books()
我已经在我的代码中的其他位置保存了一个新的Book对象,以及相关的作者,并通过点击"创建的"或"已保存"模型事件(在EventServiceProvider.php中),我希望能够同时更新相关对象中的一些字段,如下所示:
Book::created(function($book) {
$authors = $book->authors;
foreach($authors as $a){
$a->books_authored += 1;
$a->save();
}
});
..但我不能,因为$ authors调用返回没有相关的对象。如果这是通常的行为(我在这里做错了什么)?有没有办法在初始创建/保存事件中访问这些关系?
提前致谢。
答案 0 :(得分:0)
您创建图书对象然后;
$author=new Author(['name'=>'Joo']);
$book->authors()->save($author);
答案 1 :(得分:0)
我认为您遇到的问题是,在您附加作者之前,已创建的事件已触发。你没有附上你的代码,但我假设:
Book::create(['title' => 'Foo'])->author()->save(new Author['name' => 'Brian']);
这实际上如下:
$book = Book::create(['title' => 'Foo']) // Book created event fired
$relation = $book->author(); // Relation retrieved
$relation->save(new Author['name' => 'Brian']); //related author attached
您可能应该在书籍模型的函数中附加作者时手动触发事件,例如
class Book extends Eloquent
{
public function saveAuthor($author) {
if($this->save($author)) {
Event::fire(new AuthorWasAttached($this, $author));
}
}
}
然后在AuthorWasAttached
事件类