元の質問の解決策
非静的メソッドを静的に呼び出しました。モデルでパブリック関数を静的にするには、次のようになります。
public static function {
}
一般に:
Post::get()
この特定の例では:
Post::take(2)->get()
関係とスコープを定義するときに注意すべきことの1つは、「非静的メソッドを静的に呼び出さないでください」というエラーが発生するという問題が発生したことです。たとえば、名前が同じである場合です。
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
次の手順を実行すると、非静的エラーが発生します。
Event::category()->get();
問題は、Laravelがカテゴリスコープ(scopeCategory)ではなく、categoryと呼ばれるリレーションシップメソッドを使用していることです。これは、スコープまたは関係の名前を変更することで解決できます。関係の名前を変更することにしました。
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
外部キー(category_id)を定義したことに注意してください。そうしないと、Laravelは代わりにcat_idを検索し、データベースでcategory_idとして定義したため、それを見つけることができませんでした。
$obj->getAll()
、関数を使用または静的にします。