1. ホーム
  2. php

[解決済み] Eloquentモデルでメソッドを呼び出すと「Non-static method should not be called statically」が表示されるのですが?

2022-02-17 04:09:07

質問

コントローラでモデルを読み込もうとして、次のようにしました。

return Post::getAll();

エラーが発生しました Non-static method Post::getAll() should not be called statically, assuming $this from incompatible context

モデル内の関数はこのようになっています。

public function getAll()
{

    return $posts = $this->all()->take(2)->get();

}

コントローラでモデルをロードし、その内容を返す正しい方法は何でしょうか?

どのように解決するのですか?

メソッドを非静的として定義し、それを静的として呼び出そうとしています。とはいえ...

1.静的メソッドを呼び出したい場合は :: で、メソッドをstaticとして定義してください。

// Defining a static method in a Foo class.
public static function getAll() { /* code */ }

// Invoking that static method
Foo::getAll();

2.そうでない場合、インスタンスメソッドを呼び出すには、クラスをインスタンス化する必要があります。 -> .

// Defining a non-static method in a Foo class.
public function getAll() { /* code */ }

// Invoking that non-static method.
$foo = new Foo();
$foo->getAll();

備考 : Laravelでは、ほぼすべてのEloquentメソッドがモデルのインスタンスを返すので、以下のようにメソッドを連鎖させることができます。

$foos = Foo::all()->take(10)->get();

そのコードの中で私たちは 静的に を呼び出します。 all メソッドを Facade 経由で実行します。その後、他のすべてのメソッドが インスタンスメソッド .