Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Создание сложного объекта из свойств другого объекта
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Приветствую.
Вопрос в следующем. Из MySQL я получаю некий результат, на основании которого мне необходимо создать иерархически структурированный объект.
У меня есть объект с каким-то набором свойств (содержимое полей из базы).
или если нужны доступы как до методов используйте __set и __get (Добавление)
Ага, посмотрел я темку что закрыли - вам точно нужны сет и гет (Добавление) http://php.su/learnphp/phpoo/?php5_4
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
OrmaJever пишет:
я вобще ничего не понял, но может многомерный масив поможет?
Многомерный массив, по идее, может помочь. Но у меня везде вывод данных через объекты сделан, не хотелось бы в одном месте использовать массивы, если можно сделать "как и везде".
Ниже подробнее опишу задачу, а то хотел как проще... а получилось как обычно.
Warning: Attempt to assign property of non-object in /home/base/class/report.class on line 181
т.е. в первой строке все ок.
Но как только я присваиваю свойству объекта значение от другого объекта, то это свойство становится string... и его как объект уже нельзя использовать. О чем и пишет на следующей строке PHP
В следующем посте опишу задачу подробнее.
Мелкий
Отправлено: 19 Августа, 2011 - 13:04:16
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
master_alf пишет:
$items->cl_name = new stdClass;
$items->cl_name = $row->cl_name;
А теперь задумайтесь, что вы этим сделали.
----- PostgreSQL DBA
DeepVarvar
Отправлено: 19 Августа, 2011 - 13:04:20
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
master_alf бред..
Бред в созданном объекте класса DB создавать объект другого класса и в цикле пихать ему свойства.
Сделайте DB так чтобы он мог принять запрос и вернуть массив результата.
Сделайте узловой объект, который будет на лету добавлять другие объекты как свойства.
Обращайтесь из любого объекта к другому объекту через узловой.
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Задача вот какая.
В базе хранится история продаж, в трех разных таблицах.
Кто купил, что купил, и когда купил.
Мне нужно сделать сводный отчет вида:
"Компания №1 купила товар №2 (кол-во), товар №3(кол-во), товар№4(кол-во) и т.д.", и для наглядности нужно это все расчертить красивой таблицей.
Я делаю запрос к базе и получаю по каждой компании данные.
Но в одной строке результата я получаю данные по одному виду товаров для компании. Соответственно если я так же и буду выводить, то у меня получиться не наглядная таблица.
Будет что-то вроде
"Компания №1 товар №2
Компания №1 товар №3
Компания №1 товар №4"...
Что бы от этого уйти, мне нужно из строк результата MySQL свести данные воедино.
Т.е. получить структуру примерно следующего вида:
$obj(компания)->tovar_id(цифра товара)->count(количество проданного)
И уже в результирующей таблице я сделаю нужный вывод информации.
Вот и вопрос, собственно, каким образом я могу сделать нужный мне вид объекта?
while($row=mysql_fetch_object($tempQRY)){//в цикле заполняем результирующий объект нужными данными.
$obj->{$row->tovar_id}=$row->tovar_id
$obj->{$row->tovar_id}->count=$row->count
}
return$obj;
Логика вот такая. При таком раскладе объект должен бы заполняться правильным образом, т.е. не будут дублироваться покупатели, и по каждому покупателю будет полностью заполнена вся его история...
но как правильно исполнить эту запись? вот чего понять не могу
P.S.Сори за объем, но кратко объяснить у меня не получилось.
DeepVarvar
Отправлено: 19 Августа, 2011 - 13:14:59
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Прочтите то что я написал выше и еще выше (оба сообщения).
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Мелкий пишет:
master_alf пишет:
$items->cl_name = new stdClass;
$items->cl_name = $row->cl_name;
А теперь задумайтесь, что вы этим сделали.
Как я понимаю - глупость
Только не уверен почему... Но Ваш совет я понял именно так >_<
Наверное, тип объекта перезаписывается при присваивании значения из свойства другого объекта?..
DeepVarvar пишет:
Сделайте DB так чтобы он мог принять запрос и вернуть массив результата..
Я, конечно, могу получить данные в виде массива, но каким образом я смогу слепить такой объект, как мне нужен - так и не пойму. (Добавление)
DeepVarvar пишет:
Прочтите то что я написал выше и еще выше (оба сообщения).
Сообщения прочел сразу, но для начала решил более точно описать, что же мне нужно.
Про __set и __get не читал, сейчас ознакомлюсь.
Спасибо за совет.
DeepVarvar
Отправлено: 19 Августа, 2011 - 13:25:48
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
То что вы делаете можно получить одним запросом в базу, уже в массив с количеством и т.д...
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Согласен, пример очень похож.
Только в Вашем случае просто выводится все, что было приобретено конкретным пользователем. Грубо говоря получается одномерная таблица... т.е. просто список.
1ый товар
2ой товар
3ий товар
Мне нужно получить таблицу вида
Название | товар 1 | товар 2| товар 3|
Фирма_1 | 3шт | 0 шт | 2 шт |
Фирма_2 | 1шт | 2 шт | 0 шт |
При Вашей же реализации получится что-то вроде
Фирма_1 | 3шт
Фирма_1 | 0шт
Фирма_1 | 2шт
Вот из-за этого и весь мой велосипед придумывается.
Что касается использования массивов вместо классов. Думаю и правда это разумнее, экономичнее и оптимальнее... Но я сейчас только изучаю ООП, потому в данном учебном проекте решаю задачи через него.
DeepVarvar
Отправлено: 19 Августа, 2011 - 14:19:39
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Фирма_1, Фирма_2 это тоже что и "ключик в куках 1", "ключик в куках 2"
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
DeepVarvar пишет:
Фирма_1, Фирма_2 это тоже что и "ключик в куках 1", "ключик в куках 2"
Но в таком случае я не получу статистику по всем фирмам, я получу по одной конкретной. А мне нужно список по всем фирмам.
Если я буду использовать фирму в WHERE, то мне нужно делать кучу запросов.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.