拥有以下型号:
news.php
class News extends Aware {
public static $table = 'noticia';
public static $key = 'idnoticia';
public static $timestamps = false;
public static $rules = array(
'titulo' => 'required',
'subtitulo' => 'required',
);
public function images()
{
return $this->has_many('Image');
}
}
image.php
class Image extends Aware {
public static $timestamps = true;
public static $rules = array(
'unique_name' => 'required',
'original_name' => 'required',
'location' => 'required',
'news_id' => 'required',
);
public function news()
{
return $this->belongs_to('News');
}
}
然后在控制器中执行以下操作:
$image = new Image(array(
'unique_name' => $fileName,
'original_name' => $file['file']['name'],
'location' => $directory.$fileName,
'news_id' => $news_id,
));
News::images()->insert($image);
我不断收到以下错误消息:
非静态方法News :: images()不应该静态调用, 从不兼容的上下文假设$ this
任何想法我做错了什么?
似乎不需要设置public static function images()
,因为刷新后我收到错误
不在对象上下文中$ this
戈登说通过做News::images()->insert($image);
我正在做一个静态的电话,但那是怎么看的呢
答案 0 :(得分:3)
您在名为$this
盟友的函数中使用static
。那是不可能的。
$this
创建实例后, new
才可用。
如果打开严格模式,您将收到另一个错误,即images
不是静态函数,因此不应静态调用。
问题出在News::images()
,而不是images()->insert($image);
答案 1 :(得分:3)
你错过了一些步骤。
图片属于新闻,但您没有引用要更新的新闻帖子 你可能想这样做:
$image = new Image(array(...));
$news = News::find($news_id);
$news->images()->insert($image);
docs中的更多内容。
答案 2 :(得分:1)
$ this只能在对象实例中使用。 Class :: method()调用指定类的静态方法。
在你的情况下,你混合了两者。
图像的函数定义适用于对象实例:
public function images()
{
return $this->has_many('Image');
}
您将其称为静态方法:
News::images()->insert($image);
需要实例化News
类或修改images方法以支持静态调用。