无法访问'创建'模特活动?

时间:2016-11-16 08:38:58

标签: laravel laravel-5 eloquent

请有人澄清一下吗?我以前曾经多次使用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调用返回没有相关的对象。如果这是通常的行为(我在这里做错了什么)?有没有办法在初始创建/保存事件中访问这些关系?

提前致谢。

2 个答案:

答案 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事件类

中进行处理

This may be of help.