У меня возникли проблемы с пониманием CSqlDataProvider и с тем, как он работает.
Когда я использую CActiveDataProvider , к результатам можно получить доступ следующим образом:
$data->userProfile['first_name'];
Однако, когда я использую CSqlDataProvider, я понимаю, что результаты возвращаются как массив, а не как объект.Однако структура массива плоская.Другими словами, я вижу следующий массив:
$data['first_name']
вместо
$data['userProfile']['first_name']
Но проблема здесь в том, что если у меня есть другая объединенная таблица (назовем ее «автор»)) в моем коде sql, который также содержит поле first_name?С CActiveDataProvider эти два поля устранены, поэтому я могу сделать следующее для доступа к двум полям:
$data->userProfile['first_name'];
$data->author['first_name'];
Но с CSqlDataProvider, похоже, в любом случае я не могу получить доступ к данным следующим образом:
$data['userProfile']['first_name'];
$data['author']['first_name'];
Итак, кроме присвоения уникального имени этим полям непосредственно внутри моего SQL, сделайте что-то вроде этого:
select author.first_name as author_first_name, userProfile.first_name as user_first_name
И затем обращайтесь к ним следующим образом:
$ data ['author_first_name'];$ data ['user_first_name']
Есть ли в любом случае CSqlDataProvider для автоматической структуризации массивов, чтобы они были вложены так же, как объекты CActiveDataProvider?Так что я могу вызвать их, используя $ data ['userProfile'] ['first_name']
Или есть другой класс, который я должен использовать для получения таких вложенных массивов?
Большое спасибо!