Zend Db Table Abstract fetchRow добавляет в нее новые объекты

У меня есть fetchRow, вот так:

$db = new Database();
$data = $db->fetchRow($db->select()->where('id = ?',$id));

Сделано это, я хотел бы получить все файлы из таблицы файлов, например:

$files = new Database();
$photos = $files->fetchAll($files->select()->where('id = ?',$data->id));

Но он возвращает два разных объекта, как я могу добавить его только к одному объекту?

If I do:

$this->view->photos = $photos;
$this->view->data = $data;

Это работает, но как я могу объединить фотографии внутри данных?

Спасибо и всего наилучшего.


person Rodrigo Ferrari    schedule 08.08.2010    source источник


Ответы (2)


пытаться

$db = new Database();
$data = $db->fetchRow($db->select()->where('id = ?',$id));

$files = new Database();
$photos = $files->fetchAll($files->select()->where('id = ?',$data->id));



array_push( $photos, $data);
person streetparade    schedule 08.08.2010
comment
Я пробовал, но это не сработало, я думаю, что возвращаемые значения являются объектами, а абстрактная таблица zend db может добавлять новые значения объектов. наилучшие пожелания - person Rodrigo Ferrari; 08.08.2010
comment
Вы не можете этого сделать, потому что данные набора строк должны быть гидратированы... этого не произойдет, пока вы не прокрутите результаты (по крайней мере, этого не было в последний раз, когда я использовал Zend_Db в 1.7). Чтобы сделать то, что вы описали, вам нужно будет вручную перебрать оба этих набора строк и назначить их массиву, или, если все данные были ранее доступны, вы можете вызвать toArray для объекта набора строк и получить массив, но это будет также превратить объекты строки в массивы. - person prodigitalson; 08.08.2010
comment
Хорошо, я сделаю это. Спасибо‹br› $row = $db-›fetchRow($dado)-›toArray();‹br› $fotos['fotos'] = $db-›fetchRow($dado)-›findDependentRowset('Fotos') -›toArray();‹br› $data = (object)array_merge($row,$fotos); Спасибо и всего наилучшего. - person Rodrigo Ferrari; 08.08.2010

Если ваша таблица представляет собой набор данных файлов разных типов, вам необходимо контролировать, как они гидратируются, т.е. какие объекты возвращаются из запроса. Для этого вам нужно создать свой собственный класс Rowset для таблицы и установить его как свойство класса базы данных (при условии, что это Zend_Db_Table).

В этом классе набора строк вы должны изучить свойство строки как ее гидратацию, а затем выбрать, какой класс использовать «Данные» или «Фото». Чтобы сохранить согласованность, вам также потребуется изменить класс таблицы, чтобы обрабатывать гидратацию одной записи (т. е. использовать метод поиска).

person prodigitalson    schedule 08.08.2010
comment
Понятия не имею, как это сделать, я использую абстрактную таблицу zend db и сделал отношение, я могу вызвать второй запрос, выполнив $row->findDependentRowset('Fotos'); С наилучшими пожеланиями. - person Rodrigo Ferrari; 08.08.2010
comment
Не могли бы вы обновить свой вопрос, указав схему для таблиц, о которых мы говорим, и/или имена классов таблиц и строк? Я не знал, что у вас есть зависимый набор строк, хотя все было в одной таблице, судя по тому, как вы сформулировали свой вопрос, и по указанному вами имени класса. - person prodigitalson; 08.08.2010
comment
Спасибо, я смог это решить, превратить все в массив, затем объединить, чем снова превратить в объект. Спасибо за ваши ответы, с наилучшими пожеланиями. - person Rodrigo Ferrari; 08.08.2010