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

时间:2018-11-15 00:19:34

标签: laravel laravel-5

有一个模型数据:

class Order extends Model
{
}

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

Order::myMethod()
Order->myMethod()

myMethod在哪里:

public function myMethod() {
     return DB::query(<SQL QUERY>);
}

目的是将SQL查询移入模型的类中,以免在控制器中弄乱此代码。

5 个答案:

答案 0 :(得分:3)

宁可在Model中创建自定义函数,也可以使用特征来获得所需的输出。

请按照以下任一步骤操作:-

答案 1 :(得分:2)

猜你在问静态函数:

class Order extends Model {
     public static function myMethod() {
     }
}

,您可以在任何地方调用它

Order::myMethod();

答案 2 :(得分:1)

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

class ABC extends Model
{
   //here is your fillable array;
   public function abc()
   {
      //Here is your Eloquent statement or SQL query;
   }
}

只需像这样在控制器内部调用此abc()方法

 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();
     }
 }

谢谢

答案 3 :(得分:1)

您可以使用魔术方法__call__callStatic实现所需的行为 如果您的真实方法是静态的,则可以使用__call()来拦截所有“非静态”调用,并使用它来调用静态,然后使用__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();

答案 4 :(得分:0)

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

  

目的是将SQL查询移入模型的类中,以免在控制器中弄乱此代码。

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