Проблема:CakePHP 3: содержит() функция приводит вложенную ДАННЫЕ
Я хочу, чтобы запустить этот запрос в CakePHP 3
SELECT
medicine_records.*,
medicines.name AS medicine_name,
medicines.subname AS `medicine_subname`
FROM medicine_records
INNER JOIN medicines ON medicines.id = medicine_records.medicine_id
Контроллер:
$medicines = $this->MedicineRecords->find()->contain(['Medicines'])->all();
CakePHP Запросы войти:
2017-02-14 09:58:47 Debug: duration=1 rows=1 SELECT MedicineRecords.id AS `MedicineRecords__id`, MedicineRecords.user_id AS `MedicineRecords__user_id`, MedicineRecords.medicine_id AS `MedicineRecords__medicine_id`, MedicineRecords.times_pre_day AS `MedicineRecords__times_pre_day`, MedicineRecords.created AS `MedicineRecords__created`, MedicineRecords.modified AS `MedicineRecords__modified`, Medicines.id AS `Medicines__id`, Medicines.name AS `Medicines__name`, Medicines.subname AS `Medicines__subname`, Medicines.type AS `Medicines__type`, Medicines.created AS `Medicines__created`, Medicines.modified AS `Medicines__modified` FROM medicine_records MedicineRecords INNER JOIN medicines Medicines ON Medicines.id = (MedicineRecords.medicine_id)
Результаты поиска:
"data": [
{
"id": 1,
"user_id": 1,
"medicine_id": 3,
"times_pre_day": 2,
"created": "2017-02-14T04:55:48+00:00",
"modified": "2017-02-14T04:55:48+00:00",
"medicine": {
"id": 3,
"name": "Name",
"subname": "Subname",
"type": 1,
"created": "2017-02-13T09:38:48+00:00",
"modified": "2017-02-13T09:38:48+00:00"
}
}
]
Этот результат имеет лекарство на уровне ребенка. Я хочу, чтобы все данные в верхнем уровне, как это:
"data": [
{
"id": 1,
"user_id": 1,
"medicine_id": 3,
"times_pre_day": 2,
"medicine_name": "Name",
"medicine_subname": "Subname",
"created": "2017-02-14T04:55:48+00:00",
"modified": "2017-02-14T04:55:48+00:00",
}
]
Я уже пытаюсь использовать public $recursive = -1;
, но я думаю, что это не работает на CakePHP 3.
Update
Удалить WHERE medicine_records.id = 1
Извините за мою ошибку. В запросе нет 'WHERE medicine_records.id = 1'. Таким образом, результат может иметь много записей. Я использую: '$ medicines = $ this-> MedicineRecords-> find() -> содержать (['Medicines']) -> all();' * Извините * –
Вы можете публиковать с обновленным результатом (например, debug ($ лекарства);), если это не сделано. –
[** Выбор полей **] (https://book.cakephp.org/3.0/en/orm/query-builder.html#selecting-data) так, как это необходимо, возможно, более прямолинейно, чем переформатирование всего , – ndm