Laravel отдельная функция querybuilder не работает в поиске - PullRequest
0 голосов
/ 13 января 2020

Я попытался вставить distinct() в свой запрос, но когда я получаю результаты в своем интерфейсе и в API, я все равно получаю дубликаты записей. Кто-нибудь знает, почему distinct не работает в моем коде?

Мой код

 $result =  DB::connection('mysql2')
                    ->table('xp_pn_ura_transactions')
                    ->whereRaw(DB::raw("CONCAT(block, ' ', street,' ',project_name,' ', postal_code,'')LIKE '%$request->projectname%' order by STR_TO_DATE(sale_date, '%d-%M-%Y') asc"))
                    ->limit($request->limit)
                    ->distinct()
                    ->get();

 return \Response::json(array(
                //'total_count' => $count,
                'result' => $result,
            ));

Внешний результат enter image description here

Мой В ответ я получаю только первые два объекта, которые дублируют

{
"id": 228686,
"transtype": "RESI",
"project_name": "WATERFRONT WAVES",
"unitname": "08-06 ",
"block": "760",
"street": "Bedok Reservoir Road  ",
"level": "08",
"stack": "06 ",
"no_of_units": "1",
"area": "147",
"type_of_area": "Strata",
"transacted_price": "1300500",
"nettprice": "-",
"unitprice_psm": "8847",
"unitprice_psf": "822",
"sale_date": "20-JAN-2008",
"contract_date": " ",
"property_type": "Condominium",
"tenure": "99 Yrs From 31/10/2007",
"completion_date": "Uncompleted",
"type_of_sale": "New Sale",
"purchaser_address_indicator": "Private",
"postal_district": "16",
"postal_sector": "47",
"postal_code": "479245",
"planning_region": "East Region",
"planning_area": "Bedok",
"update_time": "2019-12-09 17:14:35"
},
{
"id": 224686,
"transtype": "RESI",
"project_name": "WATERFRONT WAVES",
"unitname": "08-06 ",
"block": "760",
"street": "Bedok Reservoir Road  ",
"level": "08",
"stack": "06 ",
"no_of_units": "1",
"area": "147",
"type_of_area": "Strata",
"transacted_price": "1300500",
"nettprice": "-",
"unitprice_psm": "8847",
"unitprice_psf": "822",
"sale_date": "20-JAN-2008",
"contract_date": " ",
"property_type": "Condominium",
"tenure": "99 Yrs From 31/10/2007",
"completion_date": "Uncompleted",
"type_of_sale": "New Sale",
"purchaser_address_indicator": "Private",
"postal_district": "16",
"postal_sector": "47",
"postal_code": "479245",
"planning_region": "East Region",
"planning_area": "Bedok",
"update_time": "2019-12-09 17:11:57"
}

Они получили разные id, но те же записи, есть ли способ игнорировать идентификатор и получить другие поля?

1 Ответ

1 голос
/ 13 января 2020

Вам нужно выбрать нужное поле для distinct, или оно будет distinct для всех выбранных вами полей:

Итак, согласно вашему сообщению, id и updated_time не дублируются, вам не нужно выделять их.

Попробуйте что-то вроде этого:

$result =  DB::connection('mysql2')
                    ->table('xp_pn_ura_transactions')
                    ->whereRaw(DB::raw("CONCAT(block, ' ', street,' ',project_name,' ', postal_code,'')LIKE '%$request->projectname%' order by STR_TO_DATE(sale_date, '%d-%M-%Y') asc"))
                    ->limit($request->limit)
# select the fields which is duplicated.(In your post, select the field without id and updated_time)
                    ->select("transtype",
"project_name",
"unitname",
"block",
"street",
"level",
"stack",
"no_of_units",
"area",
"type_of_area",
"transacted_price",
"nettprice",
"unitprice_psm",
"unitprice_psf",
"sale_date",
"contract_date",
"property_type",
"tenure",
"completion_date",
"type_of_sale",
"purchaser_address_indicator",
"postal_district",
"postal_sector",
"postal_code",
"planning_region",
"planning_area")
                    ->distinct()
                    ->get();

если вам нужно выбрать поля, не дублированные, вы можете использовать groupBy() вместо distinct()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...