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来实现所需的输出,而不是在模型中创建自定义函数 请遵循以下任一步骤:-
- 我不明白你的确切问题是什么。但是如果您使用的是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
做什么的信息吗?你需要的是存储库设计模式。好奇的是,为什么不使用雄辩呢?