<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум ReadyScript &mdash; Возврат тип данных список в ORM]]></title>
		<link>http://forum.readyscript.ru/topic/1018/vozvrat-tip-dannykh-spisok-v-orm/</link>
		<atom:link href="http://forum.readyscript.ru/feed/rss/topic/1018/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Возврат тип данных список в ORM».]]></description>
		<lastBuildDate>Tue, 13 Dec 2016 08:20:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Возврат тип данных список в ORM]]></title>
			<link>http://forum.readyscript.ru/post/5560/#p5560</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Насколько я понимаю $this-&gt;dir = $this-&gt;url-&gt;request(&#039;dir&#039;, TYPE_STRING); влияет на выборку устройств при выборе категории. Выборка работает, и категории и устройства создаются. У меня проблема совсем в другом, при добавлении/редактировании устройства, в списке категории выводится лишь Верхний уровень</p></blockquote></div><p>Ааа. Ну тут всё просто. Нужно вызвать статический метод из Вашего Апи категорий. У каждого апи, которое Вы создаёте, есть метод <strong>selectSelectList</strong>, который вернёт то что нужно.</p><div class="codebox"><pre><code>&#039;parent&#039; =&gt; new Type\Integer(array(
         &#039;index&#039; =&gt; true,
         &#039;description&#039; =&gt; t(&#039;Категория&#039;),
         &#039;List&#039; =&gt; array(array(&#039;\Service\Model\DeviceDirApi&#039;, &#039;staticSelectList&#039;)),
         &#039;Attr&#039; =&gt; array(array(&#039;size&#039; =&gt; 0)),
)),</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Tue, 13 Dec 2016 08:20:11 +0000</pubDate>
			<guid>http://forum.readyscript.ru/post/5560/#p5560</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возврат тип данных список в ORM]]></title>
			<link>http://forum.readyscript.ru/post/5558/#p5558</link>
			<description><![CDATA[<div class="quotebox"><cite>Закусило Александр пишет:</cite><blockquote><p>statiсList вернёт ORM объекты которые привязаны к вызываемому api, т.е \Service\Model\Orm\DeviceDir. Т.е. для получения объектов устройств должно быть своё АПИ, у которого будет объект устройств. Я так понимаю Вы реализуете свой контроллер для админ панели. Если посмотрите в контроллер статей, то там видно, что используется два апи. И ловится GET параметр <strong>dir</strong> который применяет <strong>parent</strong> к списку устройств. <br /></p><div class="codebox"><pre><code>$this-&gt;dir = $this-&gt;url-&gt;request(&#039;dir&#039;, TYPE_STRING);     </code></pre></div><p>Проследите цепочку <strong>$this-&gt;dir</strong><br />Сначала идёт <strong>helperIndex</strong>(), а потом <strong>actionIndex</strong>()<br />Я подробно рассматриваю вопрос создания <a href="https://www.youtube.com/watch?v=wA-1DK1QtEI&amp;index=8&amp;list=PLh6R2ixK62TjPL31OFFGG2fL4X2UTC6Aw&amp;t=95s">контроллеров в этом видео</a>.</p></blockquote></div><p>Контроллер у меня вроде бы работает, по крайней мере в другом, созданном мною, модуле. Там даже работает getInstance и getSelectList. Различия между модулями лишь в наличии поля &#039;parent&#039;.</p><p>Часть кода админ контроллера:<br /></p><div class="codebox"><pre><code>function __construct()
    {
        parent::__construct(new \Service\Model\DeviceApi());
        $this-&gt;dirapi = new \Service\Model\DeviceDirApi();
    }

    function actionIndex()
    {
        //Если категории не существует, то выбираем пункт &quot;Все&quot;
        if ($this-&gt;dir &gt; 0 &amp;&amp; !$this-&gt;dirapi-&gt;getById($this-&gt;dir)) $this-&gt;dir = 0;

        // если выбрана категория
        if ($this-&gt;dir &gt; 0) $this-&gt;api-&gt;setFilter(&#039;parent&#039;, $this-&gt;dir);

        return parent::actionIndex();
    }

    function helperIndex()
    {
        $helper = parent::helperIndex();
        $this-&gt;dir = $this-&gt;url-&gt;request(&#039;dir&#039;, TYPE_STRING);
        ....</code></pre></div><p>Насколько я понимаю <strong>$this-&gt;dir = $this-&gt;url-&gt;request(&#039;dir&#039;, TYPE_STRING);</strong> влияет на выборку устройств при выборе категории. Выборка работает, и категории и устройства создаются. У меня проблема совсем в другом, при добавлении/редактировании устройства, в списке категории выводится лишь <strong>Верхний уровень</strong></p><div class="quotebox"><cite>Закусило Александр пишет:</cite><blockquote><p>Если же Вам просто нужна выборка для parent, то можно как вариант либо сделать это через АПИ устройств, либо через ORM Request<br /></p><div class="codebox"><pre><code>$devices = \RS\Orm\Request::make()
   -&gt;from(new Класс устройст)
   -&gt;where(array(
        &#039;parent&#039; =&gt; id родителя
   ))-&gt;objects();</code></pre></div></blockquote></div><p>Спасибо, разобрался)<br />Глупо вышло, нужно было вернуть простейший массив [id] =&gt; [title]</p>]]></description>
			<author><![CDATA[null@example.com (Ба Ань)]]></author>
			<pubDate>Tue, 13 Dec 2016 03:42:41 +0000</pubDate>
			<guid>http://forum.readyscript.ru/post/5558/#p5558</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возврат тип данных список в ORM]]></title>
			<link>http://forum.readyscript.ru/post/5555/#p5555</link>
			<description><![CDATA[<p>statiсList вернёт ORM объекты которые привязаны к вызываемому api, т.е \Service\Model\Orm\DeviceDir. Т.е. для получения объектов устройств должно быть своё АПИ, у которого будет объект устройств. Я так понимаю Вы реализуете свой контроллер для админ панели. Если посмотрите в контроллер статей, то там видно, что используется два апи. И ловится GET параметр <strong>dir</strong> который применяет <strong>parent</strong> к списку устройств. <br /></p><div class="codebox"><pre><code>$this-&gt;dir = $this-&gt;url-&gt;request(&#039;dir&#039;, TYPE_STRING);     </code></pre></div><p>Проследите цепочку <strong>$this-&gt;dir</strong><br />Сначала идёт <strong>helperIndex</strong>(), а потом <strong>actionIndex</strong>()<br />Я подробно рассматриваю вопрос создания <a href="https://www.youtube.com/watch?v=wA-1DK1QtEI&amp;index=8&amp;list=PLh6R2ixK62TjPL31OFFGG2fL4X2UTC6Aw&amp;t=95s">контроллеров в этом видео</a>.<br />Если же Вам просто нужна выборка для parent, то можно как вариант либо сделать это через АПИ устройств, либо через ORM Request<br /></p><div class="codebox"><pre><code>$devices = \RS\Orm\Request::make()
   -&gt;from(new Класс устройст)
   -&gt;where(array(
        &#039;parent&#039; =&gt; id родителя
   ))-&gt;objects();</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Mon, 12 Dec 2016 12:55:36 +0000</pubDate>
			<guid>http://forum.readyscript.ru/post/5555/#p5555</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возврат тип данных список в ORM]]></title>
			<link>http://forum.readyscript.ru/post/5554/#p5554</link>
			<description><![CDATA[<div class="quotebox"><cite>Закусило Александр пишет:</cite><blockquote><p>getInstance() реализует паттерн Singletone. И предназначен для возвращения одной копии объекта всегда(Singletone). Что касается selectList, то она использует родительскую функцию getSelectList(0) и действительно запрашивает доп. поля. Это всё можно использовать, но не понятно. Какую задачу Вы хотите решить и что получить? Какая структура данных?<br />Кстати на всякий случай у нас есть <a href="https://readyscript.ru/video/?t=developer">видеоуроки по программированию</a></p></blockquote></div><p>Я хочу получить 2 связанные таблицы: категории и устройства.</p><p>ORM категории:<br /></p><div class="codebox"><pre><code>&#039;site_id&#039; =&gt; new Type\CurrentSite(),
                &#039;title&#039; =&gt; new Type\Varchar(array(
                    &#039;maxLength&#039; =&gt; &#039;150&#039;,
                    &#039;description&#039; =&gt; t(&#039;Название&#039;),
                    &#039;Checker&#039; =&gt; array(&#039;chkEmpty&#039;,t(&#039;Необходимо заполнить поле название&#039;)),
                    &#039;attr&#039; =&gt; array(array(
                        &#039;data-autotranslit&#039; =&gt; &#039;alias&#039;
                    ))
                )),
                &#039;alias&#039; =&gt; new Type\Varchar(array(
                    &#039;maxLength&#039; =&gt; &#039;150&#039;,
                    &#039;description&#039; =&gt; t(&#039;Псевдоним(Ан.яз)&#039;),
                )),
                &#039;image&#039; =&gt; new Type\Image(array(
                    &#039;maxLength&#039; =&gt; &#039;255&#039;,
                    &#039;max_file_size&#039; =&gt; 10000000,
                    &#039;allow_file_types&#039; =&gt; array(&#039;image/pjpeg&#039;, &#039;image/jpeg&#039;, &#039;image/png&#039;, &#039;image/gif&#039;),
                    &#039;description&#039; =&gt; t(&#039;Картинка&#039;),
                )),
                &#039;public&#039; =&gt; new Type\Integer(array(
                    &#039;description&#039; =&gt; t(&#039;Показывать категорию&#039;),
                    &#039;maxLength&#039; =&gt; 1,
                    &#039;default&#039; =&gt; 1,
                    &#039;checkboxView&#039; =&gt; array(1,0)
                )),
                &#039;sortn&#039; =&gt; new Type\Integer(array(
                    &#039;description&#039; =&gt; t(&#039;Сортировочный индекс&#039;),
                    &#039;maxLength&#039; =&gt; &#039;11&#039;,
                    &#039;visible&#039; =&gt; false,
                )),</code></pre></div><p>API категории:<br /></p><div class="codebox"><pre><code>&lt;?php
namespace Service\Model;

class DeviceDirApi extends \RS\Module\AbstractModel\TreeCookieList
{
    protected
        static $instance;

    function __construct()
    {
        parent::__construct(new \Service\Model\Orm\DeviceDir,
            array(
                &#039;multisite&#039; =&gt; true,
                &#039;idField&#039; =&gt; &#039;id&#039;,
                &#039;aliasField&#039; =&gt; &#039;alias&#039;,
                &#039;nameField&#039; =&gt; &#039;title&#039;,
                &#039;sortField&#039; =&gt; &#039;sortn&#039;,
                &#039;defaultOrder&#039; =&gt; &#039;sortn&#039;,
            ));
    }

    static function getInstance()
    {
        if (!isset(self::$instance)) self::$instance = new self();
        return self::$instance;
    }

    static function selectList($include_root = true)
    {
        $_this = self::getInstance();
        $list = $_this -&gt; getSelectList(0);
        return $include_root ? array(&#039;&#039; =&gt; t(&#039;Верхний уровень&#039;)) + $list : $list;
    }

    function listWithAll()
    {
        $tree = $this-&gt;getTreeList();
        array_unshift($tree, array(&#039;fields&#039; =&gt; array(
            &#039;noOtherColumns&#039; =&gt; true,
            &#039;noCheckbox&#039; =&gt; true,
            &#039;noDraggable&#039; =&gt; true,
            &#039;noFullValue&#039; =&gt; true,
            &#039;title&#039; =&gt; t(&#039;Все&#039;),
            &#039;id&#039; =&gt; 0,
            &#039;alias&#039; =&gt; &#039;&#039;
        ),
            &#039;child&#039; =&gt; array()
        ));
        return $tree;
    }

}</code></pre></div><p>ORM устройств:<br /></p><div class="codebox"><pre><code>&#039;site_id&#039; =&gt; new Type\CurrentSite(),
                &#039;title&#039; =&gt; new Type\Varchar(array(
                    &#039;maxLength&#039; =&gt; &#039;255&#039;,
                    &#039;description&#039; =&gt; t(&#039;Название&#039;),
                    &#039;Checker&#039; =&gt; array(&#039;chkEmpty&#039;, t(&#039;Укажите название устройства&#039;)),
                    &#039;attr&#039; =&gt; array(array(
                        &#039;data-autotranslit&#039; =&gt; &#039;alias&#039;
                    ))
                )),
                &#039;alias&#039; =&gt; new Type\Varchar(array(
                    &#039;maxLength&#039; =&gt; &#039;150&#039;,
                    &#039;description&#039; =&gt; t(&#039;URL имя&#039;),
                    &#039;hint&#039; =&gt; t(&#039;Могут использоваться только английские буквы, цифры, знак подчеркивания, запятая, точка и минус&#039;),
                    &#039;meVisible&#039; =&gt; false,
                    &#039;Checker&#039; =&gt; array(&#039;chkalias&#039;, null),
                )),
                &#039;parent&#039; =&gt; new Type\Integer(array(
                    &#039;index&#039; =&gt; true,
                    &#039;description&#039; =&gt; t(&#039;Категория&#039;),
                    &#039;List&#039; =&gt; array(array(new \Service\Model\DeviceDirApi(), &#039;selectList&#039;)),
                    &#039;Attr&#039; =&gt; array(array(&#039;size&#039; =&gt; 0)),
                )),
                &#039;image&#039; =&gt; new Type\Image(array(
                    &#039;maxLength&#039; =&gt; &#039;255&#039;,
                    &#039;max_file_size&#039; =&gt; 10000000,
                    &#039;allow_file_types&#039; =&gt; array(&#039;image/pjpeg&#039;, &#039;image/jpeg&#039;, &#039;image/png&#039;, &#039;image/gif&#039;),
                    &#039;description&#039; =&gt; t(&#039;Картинка&#039;),
                )),
                &#039;sortn&#039; =&gt; new Type\Integer(array(
                    &#039;description&#039; =&gt; t(&#039;Сортировочный индекс&#039;),
                    &#039;maxLength&#039; =&gt; &#039;11&#039;,
                    &#039;visible&#039; =&gt; false,
                )),
                &#039;public&#039; =&gt; new Type\Integer(array(
                    &#039;maxLength&#039; =&gt; &#039;1&#039;,
                    &#039;index&#039; =&gt; true,
                    &#039;description&#039; =&gt; t(&#039;Показывать устройство&#039;),
                    &#039;default&#039; =&gt; 1,
                    &#039;CheckboxView&#039; =&gt; array(1, 0),
                )),</code></pre></div><p>Собственно вопрос по этому полю<br /></p><div class="codebox"><pre><code>&#039;parent&#039; =&gt; new Type\Integer(array(
                    &#039;index&#039; =&gt; true,
                    &#039;description&#039; =&gt; t(&#039;Категория&#039;),
                    &#039;List&#039; =&gt; array(array(new \Service\Model\DeviceDirApi(), &#039;selectList&#039;)),
                    &#039;Attr&#039; =&gt; array(array(&#039;size&#039; =&gt; 0)),
                )),</code></pre></div><p>Как мне вернуть SelectList из DeviceDir?</p>]]></description>
			<author><![CDATA[null@example.com (Ба Ань)]]></author>
			<pubDate>Mon, 12 Dec 2016 12:44:04 +0000</pubDate>
			<guid>http://forum.readyscript.ru/post/5554/#p5554</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возврат тип данных список в ORM]]></title>
			<link>http://forum.readyscript.ru/post/5550/#p5550</link>
			<description><![CDATA[<p>getInstance() реализует паттерн Singletone. И предназначен для возвращения одной копии объекта всегда(Singletone). Что касается selectList, то она использует родительскую функцию getSelectList(0) и действительно запрашивает доп. поля. Это всё можно использовать, но не понятно. Какую задачу Вы хотите решить и что получить? Какая структура данных?<br />Кстати на всякий случай у нас есть <a href="https://readyscript.ru/video/?t=developer">видеоуроки по программированию</a></p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Mon, 12 Dec 2016 12:26:47 +0000</pubDate>
			<guid>http://forum.readyscript.ru/post/5550/#p5550</guid>
		</item>
		<item>
			<title><![CDATA[Возврат тип данных список в ORM]]></title>
			<link>http://forum.readyscript.ru/post/5545/#p5545</link>
			<description><![CDATA[<p>Добрый вечер</p><p>Разрабатываю модуль, и мне в ORM нужно получить тип данных список из другой таблицы. Похожая реализация работает в \Article\Model\Catapi</p><div class="codebox"><pre><code>static function getInstance()
    {
        if (!isset(self::$instance)) self::$instance = new self();
        return self::$instance;
    }

    static function selectList($include_root = true)
    {
        $_this = self::getInstance();
        $list = $_this -&gt; getSelectList(0);
        return $include_root ? array(&#039;&#039; =&gt; t(&#039;Верхний уровень&#039;)) + $list : $list;
    }</code></pre></div><p>Но этот код работает, только если в моем модуле будут добавлены поля родительская папка (parent) и alias. Как мне заставить работать эту функцию, только без parent и alias?</p><p>UPD:<br />Судя по отладчику getInstance() возвращает данные, а вот getSelectList() не срабатывает.</p>]]></description>
			<author><![CDATA[null@example.com (Ба Ань)]]></author>
			<pubDate>Mon, 12 Dec 2016 10:17:21 +0000</pubDate>
			<guid>http://forum.readyscript.ru/post/5545/#p5545</guid>
		</item>
	</channel>
</rss>
