有一个模型数据:
class Order extends Model
{
}
如何在Order
类中编写自定义方法,以便可以在构造函数中调用它,如下所示:
Order::myMethod()
Order->myMethod()
myMethod
在哪里:
public function myMethod() {
return DB::query(<SQL QUERY>);
}
目的是将SQL查询移入模型的类中,以免在控制器中弄乱此代码。
答案 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。