Задать вопрос

MODx xpdo отношения?

Помогите пожалуйста, подскажите что делаю не так, уже как только не пробовал…

Создал табличку в модх, сгенерил для нее sql schema

<font color="black"><font color="#0000ff">&lt;?</font><font color="#800000">xml</font> <font color="#ff0000">version</font><font color="#0000ff">=&quot;1.0&quot;</font> <font color="#ff0000">encoding</font><font color="#0000ff">=&quot;UTF-8&quot;</font>?<font color="#0000ff">&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">model</font> <font color="#ff0000">package</font><font color="#0000ff">=&quot;photos&quot;</font> <font color="#ff0000">baseClass</font><font color="#0000ff">=&quot;xPDOObject&quot;</font> <font color="#ff0000">platform</font><font color="#0000ff">=&quot;mysql&quot;</font> <font color="#ff0000">defaultEngine</font><font color="#0000ff">=&quot;MyISAM&quot;</font> <font color="#ff0000">version</font><font color="#0000ff">=&quot;1.1&quot;</font><font color="#0000ff">&gt;</font><br/>
&nbsp;&nbsp;<font color="#0000ff">&lt;</font><font color="#800000">object</font> <font color="#ff0000">class</font><font color="#0000ff">=&quot;Show&quot;</font> <font color="#ff0000">table</font><font color="#0000ff">=&quot;show&quot;</font> <font color="#ff0000">extends</font><font color="#0000ff">=&quot;xPDOSimpleObject&quot;</font><font color="#0000ff">&gt;</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&lt;</font><font color="#800000">field</font> <font color="#ff0000">key</font><font color="#0000ff">=&quot;user_id&quot;</font> <font color="#ff0000">dbtype</font><font color="#0000ff">=&quot;int&quot;</font> <font color="#ff0000">precision</font><font color="#0000ff">=&quot;11&quot;</font> <font color="#ff0000">phptype</font><font color="#0000ff">=&quot;integer&quot;</font> <font color="#ff0000">null</font><font color="#0000ff">=&quot;false&quot;</font> <font color="#0000ff">/&gt;</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&lt;</font><font color="#800000">field</font> <font color="#ff0000">key</font><font color="#0000ff">=&quot;image_path&quot;</font> <font color="#ff0000">dbtype</font><font color="#0000ff">=&quot;varchar&quot;</font> <font color="#ff0000">precision</font><font color="#0000ff">=&quot;300&quot;</font> <font color="#ff0000">phptype</font><font color="#0000ff">=&quot;string&quot;</font> <font color="#ff0000">null</font><font color="#0000ff">=&quot;false&quot;</font> <font color="#0000ff">/&gt;</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&lt;</font><font color="#800000">field</font> <font color="#ff0000">key</font><font color="#0000ff">=&quot;pub_date&quot;</font> <font color="#ff0000">dbtype</font><font color="#0000ff">=&quot;timestamp&quot;</font> <font color="#ff0000">phptype</font><font color="#0000ff">=&quot;timestamp&quot;</font> <font color="#ff0000">null</font><font color="#0000ff">=&quot;false&quot;</font> <font color="#ff0000">default</font><font color="#0000ff">=&quot;CURRENT_TIMESTAMP&quot;</font> <font color="#ff0000">index</font><font color="#0000ff">=&quot;index&quot;</font> <font color="#0000ff">/&gt;</font><br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&lt;</font><font color="#800000">index</font> <font color="#ff0000">alias</font><font color="#0000ff">=&quot;pub_date&quot;</font> <font color="#ff0000">name</font><font color="#0000ff">=&quot;pub_date&quot;</font> <font color="#ff0000">primary</font><font color="#0000ff">=&quot;false&quot;</font> <font color="#ff0000">unique</font><font color="#0000ff">=&quot;false&quot;</font> <font color="#ff0000">type</font><font color="#0000ff">=&quot;BTREE&quot;</font> <font color="#0000ff">&gt;</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&lt;</font><font color="#800000">column</font> <font color="#ff0000">key</font><font color="#0000ff">=&quot;pub_date&quot;</font> <font color="#ff0000">length</font><font color="#0000ff">=&quot;&quot;</font> <font color="#ff0000">collation</font><font color="#0000ff">=&quot;A&quot;</font> <font color="#ff0000">null</font><font color="#0000ff">=&quot;false&quot;</font> <font color="#0000ff">/&gt;</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&lt;/</font><font color="#800000">index</font><font color="#0000ff">&gt;</font><br/>
&nbsp;&nbsp;<font color="#0000ff">&lt;/</font><font color="#800000">object</font><font color="#0000ff">&gt;</font><br/>
<font color="#0000ff">&lt;/</font><font color="#800000">model</font><font color="#0000ff">&gt;</font></font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



...


Сгенерил с помощью класса из habrahabr.ru/blogs/modx/126635/


добавил потом отношение к схеме, после " .."

<font color="black"><font color="#0000ff">&lt;</font><font color="#800000">aggregate</font> <font color="#ff0000">alias</font><font color="#0000ff">=&quot;User&quot;</font> <font color="#ff0000">class</font><font color="#0000ff">=&quot;modUser&quot;</font> <font color="#ff0000">local</font><font color="#0000ff">=&quot;user_id&quot;</font> <font color="#ff0000">foreign</font><font color="#0000ff">=&quot;id&quot;</font> <font color="#ff0000">cardinality</font><font color="#0000ff">=&quot;one&quot;</font> <font color="#ff0000">owner</font><font color="#0000ff">=&quot;foreign&quot;</font> <font color="#0000ff">/&gt;</font></font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



вопрос: как мне получить данные пользователя для фоток? (related object)?

<font color="black">$modx-&gt;addPackage( <font color="#008000">'photos', $homeDir . 'model/', 'modx_photos_');</font><br/>
$photos = $modx-&gt;getCollection('Show'); // -- все фотки выдает. user_id - прописано норм.</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



если добавляю

<font color="black">$c = $modx-&gt;newQuery(<font color="#008000">'Show');</font><br/>
$c-&gt;innerJoin(<font color="#008000">'modUser','User','Show.user_id = User.id');</font><br/>
$photos = $modx-&gt;getCollection('Show', $c); -- работает</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



НО если в foreach($photos as $p) { $p->toArray(); } — не видно полей пользователя.

если добавляю

<font color="black">$c = $modx-&gt;newQuery(<font color="#008000">'Show');</font><br/>
$c-&gt;innerJoin(<font color="#008000">'modUser','User','Show.user_id = User.id');</font><br/>
$c-&gt;<font color="#0000ff">select</font>(array(<font color="#008000">'Show.*', 'User.username')); // добавил поля для выборки</font><br/>
$photos = $modx-&gt;getCollection('Show', $c); -- не работает, ничего не возвращает, но и ошибки не выдает.</font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



ЧТО Я ДЕЛАЮ НЕ ТАК? Такое чувство что что-то упустил… не пойму что.
  • Вопрос задан
  • 6346 просмотров
Подписаться 8 Оценить Комментировать
Решения вопроса 1
bezumkin
@bezumkin
Связанные объекты не через Inner Join выбираются.

А вот так:
$user = $modx->getObject('modUser', 11);
$profile = $user->getOne('Profile');
$name = $profile->get('fullname');


В общем, вам нужно внимательно прочитать bobsguides.com/revolution-objects.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bezumkin
@bezumkin
А в шестой пункт нужно добавить в начало сниппета загрузку модели. Правильный сниппет будет выглядеть вот так:
$homeDir = $modx->getOption('core_path').'components/photos/';
$modx->addPackage('photos', $homeDir . 'model/', 'modx_ext_');

$photo = $modx->getObject('ModPhoto', 1);
$user = $photo->getOne('User');

print_r($user->toArray());

Написал на отдельный топик, практически.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы