@tit777
junior php

Совет как лучше сформировать модель для меню?

Есть таблица в БД
CREATE TABLE IF NOT EXISTS `pages` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `seo_keywords` varchar(255) NOT NULL,
  `seo_description` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `slug` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

INSERT INTO `pages` (`id`, `title`, `seo_keywords`, `seo_description`, `text`, `slug`) VALUES
(1, 'О магазине', 'ключевые_слова', 'описание', 'текст_страницы', 'about'),
(2, 'Оплата и доставка', 'ключевые_слова', 'описание', 'текст_страницы', 'buy_delivery'),
(3, 'Покупка в кредит', 'ключевые_слова', 'описание',  'текст_страницы', 'buy_credit'),
(4, 'Контакты', 'ключевые_слова', 'описание', 'текст_страницы', 'contacts');


Необходимо в layout вывести
меню
исходя из данных этой таблице

title - будет название меню
ссылка на страницу формируется - /page/ данные_из_поля_slug

на чистом SQL делал бы запрос
SELECT `title`, `slug` 
FROM pages


Имеет смысл для моей задачи использовать ActiveRecord?

1) ActiveRecord
вернет все поля таблицы pages
$pages = Pages::find()
    ->asArray()
    ->all();


как в ActiveRecord выбрать только нужные поля?
title, slug

2)
Есть еще такой вариант
$sql = 'SELECT `title`, `slug` FROM `pages`';
$pages = Yii::$app->db->createCommand($sql)->queryAll();


3)
Есть еще такой вариант
$pages = (new Query())
  ->from('pages')
  ->all();
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@A1eksandr
Как удобнее так и делайте, в принципе любой вариант допустим.
С точки зрения MVC и поддержки лучше все же использовать модель.
$pages = Pages::find()->asArray()
    ->all();

Еще лучше использовать дополнительные наборы через class PagesQuery extends \yii\db\ActiveQuery
что-то типа такого
$pages = Pages::find()->forMenu()->asArray() 
    ->all();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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