Laravel 如何在模型中编写自定义函数?

Laravel 如何在模型中编写自定义函数?,laravel,laravel-5,Laravel,Laravel 5,有一个模型数据: class Order extends Model { } 如何在Order类中编写自定义方法,以便在构造函数中调用它,如下所示: Order::myMethod() Order->myMethod() 其中myMethod为: public function myMethod() { return DB::query(<SQL QUERY>); } 公共函数myMethod(){ 返回DB::query(); } 其目的是将SQL查询移动到

有一个模型数据:

class Order extends Model
{
}
如何在
Order
类中编写自定义方法,以便在构造函数中调用它,如下所示:

Order::myMethod()
Order->myMethod()
其中
myMethod
为:

public function myMethod() {
     return DB::query(<SQL QUERY>);
}
公共函数myMethod(){
返回DB::query();
}

其目的是将SQL查询移动到模型的类中,以避免控制器中的代码混乱。

我不相信我理解您的意图。你说过:

其目的是将SQL查询移动到模型的类中,以避免控制器中的代码混乱


为什么
Order->myMethod()
需要在构造函数内部调用?如果您试图将数据访问层设计为高效工作,您可以使用。

我不相信我理解您的意图。你说过:

其目的是将SQL查询移动到模型的类中,以避免控制器中的代码混乱


为什么
Order->myMethod()
需要在构造函数内部调用?如果您试图将数据访问层设计为高效工作,可以使用。

猜您是在询问静态功能:

class Order extends Model {
     public static function myMethod() {
     }
}
你可以在任何地方这样叫它

Order::myMethod();

我猜您是在询问静态函数:

class Order extends Model {
     public static function myMethod() {
     }
}
你可以在任何地方这样叫它

Order::myMethod();

您可以使用traits来实现所需的输出,而不是在模型中创建自定义函数

请遵循以下任一步骤:-


您可以使用traits实现所需的输出,而不是在模型中创建自定义函数

请遵循以下任一步骤:-


    • 我不明白你的确切问题是什么。但是如果您使用的是laravel,那么您可以像这样在ABC模型中编写自定义方法

      class ABC extends Model
      {
         //here is your fillable array;
         public function abc()
         {
            //Here is your Eloquent statement or SQL query;
         }
      }
      
       use ABC;
       class AbcController extends Controller
       {
           private $_abc;          // it is private variable
           // this is constructor
           public function __construct(ABC $abc)
           {
              $this->_abc= $abc;
           }
           public function abcMethod()
           {
              $this->_abc->abc();
           }
       }
      
      只需像这样在控制器内部调用这个abc()方法

      class ABC extends Model
      {
         //here is your fillable array;
         public function abc()
         {
            //Here is your Eloquent statement or SQL query;
         }
      }
      
       use ABC;
       class AbcController extends Controller
       {
           private $_abc;          // it is private variable
           // this is constructor
           public function __construct(ABC $abc)
           {
              $this->_abc= $abc;
           }
           public function abcMethod()
           {
              $this->_abc->abc();
           }
       }
      

      谢谢

      我不明白你的确切问题是什么。但是如果您使用的是laravel,那么您可以像这样在ABC模型中编写自定义方法

      class ABC extends Model
      {
         //here is your fillable array;
         public function abc()
         {
            //Here is your Eloquent statement or SQL query;
         }
      }
      
       use ABC;
       class AbcController extends Controller
       {
           private $_abc;          // it is private variable
           // this is constructor
           public function __construct(ABC $abc)
           {
              $this->_abc= $abc;
           }
           public function abcMethod()
           {
              $this->_abc->abc();
           }
       }
      
      只需像这样在控制器内部调用这个abc()方法

      class ABC extends Model
      {
         //here is your fillable array;
         public function abc()
         {
            //Here is your Eloquent statement or SQL query;
         }
      }
      
       use ABC;
       class AbcController extends Controller
       {
           private $_abc;          // it is private variable
           // this is constructor
           public function __construct(ABC $abc)
           {
              $this->_abc= $abc;
           }
           public function abcMethod()
           {
              $this->_abc->abc();
           }
       }
      

      谢谢

      您可以使用神奇的方法和 如果实际方法是静态的,则可以使用
      \uu call()
      截获所有“非静态”调用,并使用它调用静态方法,使用
      \uu callStatic
      将调用转发到该类的新实例

      您的方法应该始终是静态的,因为如果存在一个非静态方法,并且您以静态方式调用它,php将引发一个错误

      Non-static method Foo::myMethod() should not be called statically
      
      如果您的方法是静态的,则没有问题

      class Order extends Model {
          public static function myMethod() {
              return static::query()->where(...)->get(); // example
          }
          public function __call($name, $arguments) {
              return forward_static_call_array([__CLASS__, $name], $arguments);
          }
          public static function __callStatic($name, $arguments) {
              return call_user_func_array([app(__CLASS__), $name], $arguments);
          }
      }
      
      (new Order())->myMethod();
      Order::myMethod();
      

      您可以使用神奇的方法和工具实现所需的行为 如果实际方法是静态的,则可以使用
      \uu call()
      截获所有“非静态”调用,并使用它调用静态方法,使用
      \uu callStatic
      将调用转发到该类的新实例

      您的方法应该始终是静态的,因为如果存在一个非静态方法,并且您以静态方式调用它,php将引发一个错误

      Non-static method Foo::myMethod() should not be called statically
      
      如果您的方法是静态的,则没有问题

      class Order extends Model {
          public static function myMethod() {
              return static::query()->where(...)->get(); // example
          }
          public function __call($name, $arguments) {
              return forward_static_call_array([__CLASS__, $name], $arguments);
          }
          public static function __callStatic($name, $arguments) {
              return call_user_func_array([app(__CLASS__), $name], $arguments);
          }
      }
      
      (new Order())->myMethod();
      Order::myMethod();
      

      阅读查询范围上的文档。这看起来像一个。你能提供更多关于你需要
      myMethod
      做什么的信息吗?你需要的是存储库设计模式。好奇,为什么不使用雄辩呢?阅读关于查询范围的文档。这看起来像一个。你能提供更多关于你需要
      myMethod
      做什么的信息吗?你需要的是存储库设计模式。好奇的是,为什么不使用雄辩呢?