自定义查询功能laravel

时间:2016-07-28 18:23:00

标签: php function laravel eloquent laravel-5.2

我经常需要执行此查询:

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

因此,每次我想要一个像以下的函数时,不要写出来:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

在控制器中使用它:

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

答案 1 :(得分: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();

有点取决于你想要如何使用它。