Конкретизируем задачу.
Задача: Мы добавляем таблицу, связанную с пользователем. Пусть это будет чат.
В таблице chat хранятся сообщения пользователя. Связь по id пользователя, конечно же. Связь типа один(пользователь) ко многим (сообщениям). Нам надо выдернуть все данные пользователя с новыми данными в один запрос.
Варианты:
1) Мы конечно же можем писать вручную километровый sql запрос. Например, след. запрос достает только имя пользователя:
$resource = Mage::getSingleton('core/resource');
$read = $resource->getConnection('core_read');
$select = $read->select()
->from(array('chat' => $resource->getTableName('chat')), array('chat_id', 'chat.content','chat.created_at'))
->joinInner(array('cev' => $resource->getTableName('customer_entity_varchar')),
'chat.customer_id = cev.entity_id',
array('cev.value as customer_fullname'))
->joinInner(array('ea'=> $resource->getTableName('eav_attribute')),
'cev.attribute_id = ea.attribute_id',
null)
->where('ea.attribute_code = ?', 'firstname')
->where('chat.chat_id > ?', $id)
->distinct()
2) А хочеться воспользоваться готовой коллекцией пользователя, и не вникая, как работает eav customer-a, получить коллекцию, включающую новую связанную таблицу (chat).
2.1) Пляшем от модели customer. Т.е объединяем коллекцию пользователя с нашей таблицей:
$collection = Mage::getModel('customer/customer')->getCollection();
$select = $collection->addAttributeToSelect('*')->getSelect()->join('chat', "entity_id = chat.customer_id",
array('chat_id','content','customer_id'))->distinct();
$query = $select->__toString();
$data = $collection->load($query);
Если бы отношение между таблицей и коллекцией было 1 к 1, то все было бы супер. Т.е. если в таблице чата у одного пользователя нету 2-х и более сообщений, то мы получаем все данные пользователя и данные таблицы в виде коллекции.
Проблема, когда на одного пользователя несколько сообщений. Тогда sql-запрос возвращает для каждого сообщения строку с данными пользователя, что не катит для коллекции. Для создания коллекции должена быть одна строка для одного пользователя. Иначе ошибка, мол, пользователь такой уже существует в коллекции.
2.2) Пляшем от модели чата. А к модели чата мы не можем(?) добавить модель customer-а, а потаблично нам не интересно, ибо тот же километровый sql запрос.
Вопрос: как все-таки получить все данные пользователя вкупе с данными подключаемой таблицы (для соотношения 1 ко многим)?