2016-07-28 60 views
0

我经常需要执行这个查询:自定义查询功能laravel

$Op = JobCardOp::where([ 
     ['JobCardNum', '=', $JobCardNum ], 
     ['OpNum', '=', $OpNum ] 
     ])->first(); 

因此,而不是我要像一个函数,每次写了这一点:

public function getOp($JobCardNum, $OpNum) 
{ 
    $Op = JobCardOp::where([ 
     ['JobCardNum', '=', $JobCardNum ], 
     ['OpNum', '=', $OpNum ] 
     ])->first(); 
    return $Op; 
} 

我可以在我的控制器调用。我应该在哪里定义我的功能,目前我只需要一个控制器,但如果可能的话,我可能需要另一个控制器。任何帮助赞赏。

回答

2

你可以把这个方法对你的模型,如果你想作为一个静态函数。

public static function getOp($cardNum, $opNum) 
{ 
    return static::where([ 
     ['JobCardNum', '=', $cardNum], 
     ['OpNum', '=', $opNum] 
    ])->first(); 
} 

// controller 

$res = YourModel::getOp($cardNum, $opNum); 

或查询范围添加到模型

public function scopeGetOp($query, $cardNum, $opNum) 
{ 
    return $query->where([ 
     ['JobCardNum', '=', $cardNum], 
     ['OpNum', '=', $opNum] 
    ]); 
} 

// controller 

$res = YourModel::with(...)->getOp($cardNum, $opNum)->first(); 

还挺取决于您要如何使用它。

+1

适用范围绝对是您的选择。让我们继续您的查询,如果有必要。 –

3

可以定义在JobCardOpt模型的功能为静态:

public static function getOp($JobCardNum, $OpNum) 
{ 
    $Op = static::where([ 
     ['JobCardNum', '=', $JobCardNum], 
     ['OpNum', '=', $OpNum] 
    ])->first(); 
    return $Op; 
} 

而在你的控制器使用这样的:

$jobCardOpt = JobCardOpt::getOp(1, 2);