3 tables:
PaymentRequests
PaymentPurchaseOrders
PurchaseOrders
Current Relationship:
PaymentRequests -> HasMany -> PaymentPurchaseOrders -> BelongsTo ->PurchaseOrders
Current Codes on Controller:
$Get = $this->PaymentRequests->find(
'all', [
'contain'=>['PaymentPurchaseOrder'=>['PurchaseOrder']
]);
Problem:
Это слишком сложный запрос. Я хочу просто связать это с моделью, но не знаю, как это сделать.
Слишком много данных о PaymentPurchaseOrders замедляет работу системы. Вот почему я хочу реализовать ассоциацию на стороне модели.
вы можете выбрать, какие столбцы вы хотите получить, чтобы ограничить данные. Просто используйте select()
Я ограничил поля, которые уже используются, 'fields' => ['id'], но данные слишком велики,
Затем обработайте его кусками. Простое и логичное следствие.
разве это нельзя сделать в модели ?? может быть, использовать HMABT, [имеет много и принадлежит] ??
Я уже кэшировал свой запрос.
Проблема не в вашем запросе, проблема в том, что вы получаете данные ВСЕ с заданными условиями. Если у вас возвращено больше данных, чем разрешено php потреблять память, у вас заканчивается память, или для выполнения запроса просто требуется много времени, и он прерывается, потому что максимальное время выполнения запроса, вероятно, ограничено 30 или 60 секундами в зависимости от вашей конфигурации . Увеличение этого нет решение, просто пакетная обработка данных. Возможно, вы захотите узнать, как данные хранятся и обрабатываются в компьютерной системе.
В моих настоящих кодах я уже ограничивал поля, используя, ['fields'] => ['id', 'created'] и так далее ... Я проигнорировал это в своем вопросе, чтобы сделать вопрос менее сложным.





вы можете написать
'contain'=>['PaymentPurchaseOrders.PurchaseOrders']для небольшого упрощения, но я не вижу в этом смысла. Не могли бы вы объяснить, что именно слишком тяжело?