1. 程式人生 > 實用技巧 >Laravel Mysql多條件重複去重

Laravel Mysql多條件重複去重

親測可用:

public function deWeight()
    {
        $uniqueAddresses = [];
        $duplicates = [];

        YunUserEntry::orderBy('id', 'desc')->get()
            ->map(function (YunUserEntry $venue) use (&$uniqueAddresses, &$duplicates) {
                $address = sprintf("%s.%s.%s",
                    $venue
->company_id, date('Y-m-d', strtotime($venue->interview_date)), $venue->id_no); if (in_array($address, $uniqueAddresses)) { // address is a duplicate $duplicates[] = $venue->id; }
else { $uniqueAddresses[] = $address; } }); $res = YunUserEntry::whereIn('id', $duplicates)->delete(); return BaseController::returnJson(200, "去重{$res}條", null); }

另外一種:

$uniqueAddresses = [];

Venue::all()
    ->filter(function(Venue $venue) use (&$uniqueAddresses) {
        $address = sprintf("%s.%s.%s",
            $venue->street,
            $venue->house_number,
            $venue->house_number_addition);

        if (in_array($address, $uniqueAddresses)) {
            // address is a duplicate
            return $venue;
        }

        $uniqueAddresses[] = $address;
    })->map(function(Venue $venue) {
        $venue->delete();
    });