Laravel 4 save hasMany返回对非对象上的成员函数save()的调用


Laravel 4 save hasMany return Call to a member function save() on a non-object

我无法在以下示例中找到问题,我一直在查看http://laravel.com/docs/eloquent#inserting-相关的模型,但由于某种原因,我无法找到,它不起作用。

型号:

class Article extends Eloquent {
  public function category()
  {
    $this->belongsTo('Category');
  }
}
class Category extends Eloquent {
  public function articles()
  {
    $this->hasMany('Article');
  }
}

DB架构:

Articles有一个名为category_id的列,它是一个整数,Articles和Categories在id列上都有增量。

当前失败的单元测试:

  public function testCreateArticleWithCategory()
  {
    $category = new Category();
    $category->name = 'Kitties';
    $this->assertTrue($category->save());
    $cid = $category->id;
    $category = Category::find($cid);
    $article = new Article();
    $article->title = 'Hello Kitty';
    $article = $category->articles()->save($article);
    $this->assertEquals('Kitties', $article->category->name);
  }

测试失败,并显示以下消息:

正在启动测试"ArticleTest::testCreateArticleWithCategory"。PHP致命错误:对中的非对象调用成员函数save()/Users/kristiannissen/Documents/php/sarcebleu/app/tests/ArticleTest.php在线30

第30行是

$article = $category->articles()->save($article);

根据您的问题,我假设$this->assertTrue($category->save());通过了测试?

你能给我们看看你的模式吗?

另外,在你的模型中,你不应该做return $this->belongsTo('Category');return $this->hasMany('Article');吗?

你的模型不应该如下吗:

class Article extends Eloquent {
  public function category()
  {
    return $this->belongsTo('Category');
  }
}
class Category extends Eloquent {
  public function articles()
  {
    return $this->hasMany('Article');
  }
}

尝试

$article = $category->articles->save($article);

而不是

$article = $category->articles()->save($article);

有点神奇。