自定义查询函数laravel


custom query function laravel

我经常需要执行以下查询:

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

所以,与其每次我想要一个函数时都写出来,比如:

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

我可以调用我的控制器。我应该在哪里定义我的函数,目前我只需要它在一个控制器中,但如果可能的话,我可能需要它在另一个控制器。感谢您的帮助。

您可以将JobCardOpt模型中的函数定义为静态:

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

在你的控制器中这样使用它:

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

如果您想将此方法作为静态函数,可以将其放在Model上。

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

Kinda取决于您想要如何使用它。