Zend 2 робота с БД
Привет всем, прошу помощи.
Вопрос касается Zend\Db\Adapter\Adapter
В официальном мануале работают с TableGateway насколько я понял этот паттерн позволяет работать только с одной таблицей в БД, (все помнят Аlbum)
Собственно вопрос, как организовать адаптер который позволит в модели работать с несколькими таблицами.
Например в одном методе выборка с таблицы shops, в другом методе выборка с таблицы products
Буду очень благодарен за ответ
54 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарівна пхп называется Доктрина2 кажется. орм. забудь об такой реализации, про которую спрашиваешь, пока она действительно не понадобится
Якщо коротко, чим Doctrine 2 краще ? Як для новачка доволі складно розбиратись з новим фреймворком + велика абстракція Doctrine 2. Згідний з тобою на майбутнє потрібно обов’язково ...
если вы только начинаете изучать пхп и веб — то послушайтесь совета. бросайте жто дело и изучайте си шарп. лучших уроков для новичков я еще не видел ни под одну платформу. ASP.NET MVC уроки от Майкрософта. так же есть переводы нахабре. за 2 недели научитесь делать зорошие сайты () если пахать по 8 часов в день
Начал было переживать, что этот топик останется без комментариев типа «PHP — говно, учи younameit» :)
ну все познается в сравнении. я тоже писал на пхп больше 2 лет, пока не попробовал и Джаву и си шарп, и остановился на си шарпе, так как аналогов (за исключениме с++) в мире НЕТУ!
у меня так гуф умер
Ну як сказати «Тільки починаю вивчати» написав пару проектів, краще підходить слово «початківець», до цього верстав сторінки. Писав в основному процедурним/функціональним програмуванням зараз вивчаю ООП :)
p.s. З php не піду :) «Он мене нравиться!!!» ©
))))))))) ох будете еще жалеть. рынок пхп умирает.
Здається, php і С# “помирають” в унісон ))
www.tiobe.com/...paperinfo/tpci/index.html
Працював свого часу в одній конторі, поряд сидів чувак, що писав на asp.
Так він жалівся, що «от у мене є файл web.config — я там все, що треба можу замінити і у мене все працює, а в php такого немає». Мої спроби пояснити, що в php є багато фреймворків і в кожного все по-своєму, вибирай, який більше подобається, а в MS, грубо кажучи, «фреймворк» один-єдиний, результатів не дали. З того часу на фанатів asp / C# дивлюся трошки підозріло.
во первых Фреймворков хватает. асп мвц — как на меня лучший. на пхп работал с первым и вторым зендом и симфони, кодигнайтер, уии, писал свой мвц даже. Так вот — все это просто г в сравнении с тем, что создала Майкрософт. у меня много друзей пишут на пхп. так вот то что они делают неделю у меня студия создает несколько секунд. а дальнейшая разработка у меня идет в разы быстрее.... пока не попробуете не поймете.
Ну, так в php теж так можна. Називається, composer. Аналог ruby gems.
Дякую. Спробував. Вмію.
то, что вы называете компоузером в студии называется нугет пакеты. я не про это.
это пока не попробуете не поймете. скорость разработки — когда сайт пилится пол года или 1 месяц.........
Visual studio. так как для того же пхп просто физически не существует ничего подобного.
плюс отличная интеграция со всеми компонентами.
плюс нормальный типизированный и компилированный кроссплатформенный язык (шарп).
большая часть ошибок исправляется еще до компиляции....а не при отладке....
блин, попробуйте и поймете. и еще куча плюшек, которых в пхп просто нету.
Давайте по суті — що я роблю тиждень (або хоча б 3 дні), а ви за пару секунд у Visual Studio? Чи балабол?
создание сайта: логин, регистрация, авторизация через соцсети, создание БД, настройка орма, создание экшенов, контроллеров. Подтяжка новых версий бустрапа, жкюри и тд. Настройка минимизатора яваскрипт и цсс файлов.
даже используя бандлы в том же симфони 2 — это несколько дней как минимум. в студии при использовании асп нет мвц — это 1 секунда.
Все з вам ясно. Але я радий, що ви знайшли себе і технологію, з якою вам приємно працювати!
А що таке отстой чи не отстой кожен буде вирішувати сам.
P.S.
я вам на laravel за 15 хвилин зафігачу. Без перебільшень.А фрази видають в вас повного дилетанта. Нормальні розробники такими фразами не кидаються.
На цьому і розійдемося.
посмотрите. это реально в прямом смысле слова 1 сек.
я не знаю что это, но даже если 15 мин против 1 сек и так во многих задачах. вот вам и разница в скорости разработки.ну и вот это тоже в разы ускоряет разработку : нормальный типизированный и компилированный кроссплатформенный язык (шарп).
большая часть ошибок исправляется еще до компиляции
и сколько времени у вас это занимает? на сколько больше телодвижений ? (я это делаю максимум 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#о каких десятилетиях вы говорите?
насчет же пыха — в сражении динамик тайп ЯП и статик тайп ЯП — оба ЯП останутся живы живёхоньки.
а у пыха есть фича, которой нет ни у кого из популярных ЯП. та, за которую его клянут не подумавши — «он рожден чтобы умирать»
вы си шарп пробовали? создали хоть один сайт или приложение?
Да, я на нем писал. Сайты не делал, но подход 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 Framework 2.4 LTS
Symfony 2.7 LTS
Підкажіть, як така практика декілька моделей (для кожної таблиці) які співпрацюють з одним контролером IndexController який відповідає за завантаження головної сторінки
p.s Перейшов на українську мову, так простіше :)
Моделі і контроллери взагалі ніяк не пов’язані. В будь-якому контроллері можна викликати будь-які моделі в будь-якій к-сті. Це нормально.
супер, важливо було почути, буду дивитись по ситуації як далі, перший модуль на Zend