Zend 2 робота с БД

Привет всем, прошу помощи.
Вопрос касается Zend\Db\Adapter\Adapter
В официальном мануале работают с TableGateway насколько я понял этот паттерн позволяет работать только с одной таблицей в БД, (все помнят Аlbum)
Собственно вопрос, как организовать адаптер который позволит в модели работать с несколькими таблицами.
Например в одном методе выборка с таблицы shops, в другом методе выборка с таблицы products

Буду очень благодарен за ответ

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

на пхп называется Доктрина2 кажется. орм. забудь об такой реализации, про которую спрашиваешь, пока она действительно не понадобится

Якщо коротко, чим Doctrine 2 краще ? Як для новачка доволі складно розбиратись з новим фреймворком + велика абстракція Doctrine 2. Згідний з тобою на майбутнє потрібно обов’язково ...

если вы только начинаете изучать пхп и веб — то послушайтесь совета. бросайте жто дело и изучайте си шарп. лучших уроков для новичков я еще не видел ни под одну платформу. ASP.NET MVC уроки от Майкрософта. так же есть переводы нахабре. за 2 недели научитесь делать зорошие сайты () если пахать по 8 часов в день

Начал было переживать, что этот топик останется без комментариев типа «PHP — говно, учи younameit» :)

ну все познается в сравнении. я тоже писал на пхп больше 2 лет, пока не попробовал и Джаву и си шарп, и остановился на си шарпе, так как аналогов (за исключениме с++) в мире НЕТУ!

Ну як сказати «Тільки починаю вивчати» написав пару проектів, краще підходить слово «початківець», до цього верстав сторінки. Писав в основному процедурним/функціональним програмуванням зараз вивчаю ООП :)

p.s. З php не піду :) «Он мене нравиться!!!» ©

))))))))) ох будете еще жалеть. рынок пхп умирает.

Працював свого часу в одній конторі, поряд сидів чувак, що писав на asp.
Так він жалівся, що «от у мене є файл web.config — я там все, що треба можу замінити і у мене все працює, а в php такого немає». Мої спроби пояснити, що в php є багато фреймворків і в кожного все по-своєму, вибирай, який більше подобається, а в MS, грубо кажучи, «фреймворк» один-єдиний, результатів не дали. З того часу на фанатів asp / C# дивлюся трошки підозріло.

во первых Фреймворков хватает. асп мвц — как на меня лучший. на пхп работал с первым и вторым зендом и симфони, кодигнайтер, уии, писал свой мвц даже. Так вот — все это просто г в сравнении с тем, что создала Майкрософт. у меня много друзей пишут на пхп. так вот то что они делают неделю у меня студия создает несколько секунд. а дальнейшая разработка у меня идет в разы быстрее.... пока не попробуете не поймете.

во первых Фреймворков хватает. асп мвц — как на меня лучший.
Чесно, не в курсі.
то что они делают неделю у меня студия создает несколько секунд. а дальнейшая разработка у меня идет в разы быстрее
Ну, так в php теж так можна. Називається, composer. Аналог ruby gems.
пока не попробуете не поймете.
Дякую. Спробував. Вмію.

то, что вы называете компоузером в студии называется нугет пакеты. я не про это.
это пока не попробуете не поймете. скорость разработки — когда сайт пилится пол года или 1 месяц.........

то что они делают неделю у меня студия создает несколько секунд
А можна приклад? Або хтось не договорює, або... я навіть не знаю.

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

Visual studio. так как для того же пхп просто физически не существует ничего подобного.
PhpStorm + плагіни.

Давайте по суті — що я роблю тиждень (або хоча б 3 дні), а ви за пару секунд у Visual Studio? Чи балабол?

PhpStorm + плагіни
отстой для тех, кто работал в студии.
создание сайта: логин, регистрация, авторизация через соцсети, создание БД, настройка орма, создание экшенов, контроллеров. Подтяжка новых версий бустрапа, жкюри и тд. Настройка минимизатора яваскрипт и цсс файлов.
даже используя бандлы в том же симфони 2 — это несколько дней как минимум. в студии при использовании асп нет мвц — это 1 секунда.

Все з вам ясно. Але я радий, що ви знайшли себе і технологію, з якою вам приємно працювати!
А що таке отстой чи не отстой кожен буде вирішувати сам.

P.S.

логин, регистрация, авторизация через соцсети, создание БД, настройка орма, создание экшенов, контроллеров. Подтяжка новых версий бустрапа, жкюри и тд.
 я вам на laravel за 15 хвилин зафігачу. Без перебільшень.
А фрази
это 1 секунда.
видають в вас повного дилетанта. Нормальні розробники такими фразами не кидаються.
На цьому і розійдемося.

посмотрите. это реально в прямом смысле слова 1 сек.

я вам на laravel за 15 хвилин зафігачу
я не знаю что это, но даже если 15 мин против 1 сек и так во многих задачах. вот вам и разница в скорости разработки.

ну и вот это тоже в разы ускоряет разработку : нормальный типизированный и компилированный кроссплатформенный язык (шарп).
большая часть ошибок исправляется еще до компиляции

даже используя бандлы в том же симфони 2 — это несколько дней как минимум
А ясно, в общем, готовить PHP ты так и не научился...

и сколько времени у вас это занимает? на сколько больше телодвижений ? (я это делаю максимум 3 кликами — все что описал выше)

Ровно столько времени, сколько нужно для написания в консоли composer + bower install, после чего подтянутся необходимые либы и модули зенда. А, ну и php -S localhost, чтобы вебсервер запустился.

а вы знакомы с этим сайтом? zf2.com.ua

Нет, у меня с английским всё ок. Я больше по официальным материалам.

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

То, что ты создатель сомнительного сайта с переводом доки и неработающим форумом, никак не говорит о том, что ты научился готовить PHP. А твои сообщения до этого наоборот, прекрасно говорят о том, что ты его не осилил.

я уверен, что даже если б я фейсбук написал — вы б сказали тоже самое: и что тут такого? вам же всеравно на предоставленные мною доказательства. вы знаете что шарп выигрывает у пхп но все равно пытаетесь доказать, что пхп выигрывает. вы явно киселева пересмотрели....
я умел все это делать на пхп, пользоваться компоузером, бандлами и тд. это было быстрее чем вручную. но на шарпе это еще быстрее.
тоесть неработающий форум — это показатель качества? О_о

все ваши сообщения говорят, что вы ничего вокруг не видите, кроме того, что знаете. Я не говорю что шарп всегда был лучшим, но сейчас — это факт. ничего более лучшего просто нет. (с/с++ не рассматриваем).

посмотрите мануалы, практики, и тд.... не только пхп, не обязательно шарпа, других..... и тогда сможете понять, о чем я говорю.

Это же классические рассуждения джуна с элементами демонизации и идеализации технологий, это пройдёт.
А ещё у тебя походу серъёзная попоболь на фоне PHP образовалась, расскажи нам ещё об этом.

думай что хочешь. сеньер с тебя явно отвратительный, если кроме «ты не прав» без каких либо фактов отвечать на все, даже на предоставленные факты. и кстати я мидл.

если кроме “ты не прав”
А чим ти кращий? Те ж саме: “все краще, все швидше, все зручніше”.
Тобі правильно сказали — з часом це пройде.

Visual studio. так как для того же пхп просто физически не существует ничего подобного.
плюс отличная интеграция со всеми компонентами.
плюс нормальный типизированный и компилированный кроссплатформенный язык (шарп).
большая часть ошибок исправляется еще до компиляции....а не при отладке....

Чесно кажучи, тут всім насрати:)

ох будете еще жалеть. рынок пхп умирает
Може й так в нашому житті і таке може бути.
Але як на мене то ринок не вмирає 165 php вакансій на ДоУ більше ніж Java 120 і .NET 141
Це прості цифри ... для чого так «резво спорити» що краще? Я думаю, що людина яка навчилась програмувати зможе програмувати на будь чому, так підходи інші, але цьому можна навчитись і вже не з нуля. Це як на велосипеді раз навчився і катаєшся все життя. Тільки на одному комфортніше а інший тобі в п’яту точку муляє :)

это откуда вы такое взяли?

я уже не один год слышу что
джава и php умирают.

и каждый год
«а через 5 лет будет сплошное функциональное программирование»

поделитесь источниками, с которых взяли такой вывод о пыхе.

нововведения и то как их используют в пхп, Джаве и шарпе.
так вот то, что я читаю аля будет новая фишка в пхп в след выпуске в норм языках уже годами если не десятилетиями обыкновенность.

в пыхе много уже несколько лет фишек, часть которых только вот появились в Java 8

джава ж не умирала от их отсутствия?

а части фишек так и не будет. что, умрет джава?

в C# уже с 3го, куча фишек которых в Джаве не предвидится. С# уже задвинул ими Джаву?

если не десятилетиями обыкновенность.
мммм.... посмотрите на убогие по нонешним временам C# 1.0-2.0 и Java <=1.2

о каких десятилетиях вы говорите?

насчет же пыха — в сражении динамик тайп ЯП и статик тайп ЯП — оба ЯП останутся живы живёхоньки.
а у пыха есть фича, которой нет ни у кого из популярных ЯП. та, за которую его клянут не подумавши — «он рожден чтобы умирать»

вы си шарп пробовали? создали хоть один сайт или приложение?

Да, я на нем писал. Сайты не делал, но подход MS понятен, потому что это их традиционный подход

Это не адаптер работает с одной таблицей. Это TableGateway такой паттерн, который «acts as a gateway to a database table». «Table» в единственном числе.

в модели работать с несколькими таблицами.
Этот класс и так не сильно хорош, а имея методы для работы с разными таблицами станет еще хуже.

Потому простой ответ: сделайте больше одной модели. Если таблиц много — сгенерите классы. Если уже готовые тулзы, которые это умеют основываясь на структуре БД.

Правильный ответ: посмотрите на структуру свое БД, логику проекта и решите как у вас будет организована ORM, если вообще она вам нужна.

С Зендом давно не сталкивался, но как-то так:

namespace Pool\Model;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Sql\Select;

class Shops extends AbstractTableGateway {
    public function __construct($adapter)
    {
        $this->table = 'shops';

        $this->adapter = $adapter;

        $this->initialize();
    }
    
    public function Products($shopId)
    {
        $result = $this->select(function (Select $select) use ($shopId) {
            $select
                ->columns(array(
                  ...
                ))
                ->join('account', 'shops.id = products.shopId', array(
                  ...
                ))
                ))->where->equalTo('products.shopId', $shopId);
        });

        return $result->toArray();
    }
}

Спасибо конечно, но тут есть одно но, здесь жёстко зашита таблица ’shops’ в __construct() что если в следующем методе мне понадобиться доступ к другой таблице например к ’products’ ? Как на меня тут паттерн TableGateway не подходит.

p.s параллельно ищу решение сам, думаю это банальная задача всех кто работает с Zend

Дык это ж модель shops, если что-то нужно другое — джойните. Если совсем другое, то это уже в другой модели должно быть. Или я чего-то не понял?

Тогда у меня возникает логичный вопрос, при загрузке маршрута ’index’ => ’/’ должна быть одна модель или несколько, при условии что у меня на главной странице идет выборка с нескольких таблиц БД. + дополнительные методы должны быть добавить, удалить, редактировать.

Как правильно и логичные?

С зендом не работал, его нюансов и лучших практик не знаю. Но вообще принято 1 модель = 1 таблица БД (исключение иногда составляют связующие таблицы для ManyToMany связей). Для каждой модели у вас наверняка будет свой контроллер, так что

добавить, удалить, редактировать

 — это будут просто ссылки на соответствующие экшены. При загрузке индексной страницы нормально работать с несколькими моделями.

Все правильно. Додам ще:
— Моделі (в кожної з яких є своя таблиця) як правило мають якесь відношення один до одного. Наприклад, OneToMany, ManyToMany, BelongsTo, BelongsToMany etc...

Автор явно зробив якусь помилку ще на етапі проектування архітектури проекта, а тепер це виливається в отакі питання.
Ну, і зовсім костиль — зробити звичайний sql запит з join, а потім результати зв"язати з моделями, але так робити небажано.

Дякую більш менш промальовується картина, що і як, мав старий проект який був написаний без ООП і фрейморку, вирішив вивчити ZendFramework і для практики переписати його.

А почему именно Zend выбрали? Сейчас он выходит из моды вроде как. Symfony, возможно, сложноват для начала, но тот же Laravel самое оно. Laracasts — очень детально показывает примеры работы с ним.

На те було дві причини, перша це велике комюніті, друга Zend розробляють розробники PHP тобто можна сказати, що швидко він так не помре :) Думаю якщо розібратись в одному фрейворку робота з іншим з тим самим Symfony не буде проблемою всі вони на MVC побудовані

перша це велике комюніті
спорное утверждение, имхо
Zend розробляють розробники PHP
с чего вы взяли?
зы.
можна сказати, що швидко він так не помре :)
Zend Framework 2.4 LTS 2018-03-31
Symfony 2.7 LTS 05-2018 end of maintenance (05-2019 EOL)

Підкажіть, як така практика декілька моделей (для кожної таблиці) які співпрацюють з одним контролером IndexController який відповідає за завантаження головної сторінки

p.s Перейшов на українську мову, так простіше :)

Моделі і контроллери взагалі ніяк не пов’язані. В будь-якому контроллері можна викликати будь-які моделі в будь-якій к-сті. Це нормально.

супер, важливо було почути, буду дивитись по ситуації як далі, перший модуль на Zend

Підписатись на коментарі