Laravel:无法保存到变形关系

时间:2015-06-17 08:35:58

标签: polymorphism laravel-5

我刚创建了一个新项目来开始使用laravel中的多态关系,但我遇到了错误。

我有三种型号。

图书

    <?php

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    public $timestamps = false;

    protected $table = 'books';

    public function comments()
    {
        return $this->morphMany('App\models\Comment', 'commentable');
    }
}

电影

   <?php

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class Movie extends Model
{
    protected $table = 'movies';

    public function comments()
    {
        return $this->morphMany('App\models\Comment', 'commentable');
    }
}

评论

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    protected $table = 'comments';

    public function commentable()
    {
        return $this->morphTo();
    }
}

我收到一个错误,通过雄辩来保存数据。这是我正在运行的功能:

$book = Book::find(2);
$c = new Comment();
$c->body = 'currently reading';
//$output = print_r($book)
Log::info($book);
$book->comments->save($c); //error 
return view('welcome');

但是我收到以下错误:

Call to undefined method Illuminate\Database\Eloquent\Collection::save()

我浏览了各种链接,所有这些链接似乎都使用了save()函数。请帮我弄清楚错误。 据我所知,'$ book-&gt; comments'可能会返回一个集合,我无法运行保存,但那么出路是什么? 我正在关注this教程,这是以同样的方式进行的。

1 个答案:

答案 0 :(得分:1)

$ book是一个集合,只需使用first()并使用$ book-&gt; comments() - &gt; save($ c)。

$book = Book::find(2)->first();
$c = new Comment();
$c->body = 'currently reading';
$book->comments()->save($c);