2

次のモデルがあります。

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);私が静的な呼び出しをしていると言ったが、それはそれを行うために見られた方法です

4

3 に答える 3

3

ally$thisと呼ばれる関数で使用しています。staticそれは可能ではありません。

$thisでインスタンスを作成した後にのみ使用可能になりますnew

strictモードをオンにすると、別のエラーが発生します。つまり、imagesこれは静的関数ではないため、静的に呼び出すべきではありません。

問題はにありNews::images()、ではありませんimages()->insert($image);

于 2013-01-02T17:48:38.030 に答える
3

いくつかの手順がありません。

画像はニュースに属していますが、更新するニュース投稿を参照していません。
あなたはおそらくやりたいでしょう:

$image = new Image(array(...));
$news = News::find($news_id);
$news->images()->insert($image);

詳細については、ドキュメントをご覧ください。

于 2013-01-02T18:25:51.453 に答える
1

$ thisは、オブジェクトインスタンス内でのみ使用できます。Class :: method()は、指定されたクラスの静的メソッドを呼び出します。

あなたの場合、あなたは両方を混ぜました。

画像の関数定義は、オブジェクトインスタンス用です。

public function images()
{
    return $this->has_many('Image');
}

あなたはそれを静的メソッドとして呼んでいます:

News::images()->insert($image);

Newsクラスをインスタンス化するか、静的呼び出しをサポートするようにimagesメソッドを変更する必要があります。

于 2013-01-02T17:50:49.990 に答える