Задать вопрос
  • Как получить опубликованные посты по тегу с активной категорией и пользователем?

    AmberLEX
    @AmberLEX Автор вопроса
    php/web-developer
    Не знаю насколько это правильно или красиво, решил вопрос так:

    class PostRepository extends ServiceEntityRepository
    {
        public function findAllActiveByTag(string $slug)
        {
            $ids = $this->createQueryBuilder('p')
                ->select('p.id')
                ->leftJoin('p.tags', 't')
                ->where('t.slug = :slug')
                ->setParameter('slug', $slug)
                ->getQuery()
                ->getSingleColumnResult();
    
            if ($ids) {
                return $this->createQueryBuilder('p')
                    ->leftJoin('p.category', 'c')->addSelect('c')
                    ->leftJoin('p.tags', 't')->addSelect('t')
                    ->leftJoin('p.user', 'u')->addSelect('u')
                    ->where((new Expr())->in('p.id', $ids))
                    ->andWhere('p.isActive = true')
                    ->andWhere('c.isActive = true')
                    ->orderBy('p.createdAt', 'DESC')
                    ->getQuery()
                    ->getResult();
            } else {
                return [];
            }
        }
    }
    Ответ написан
  • Как перенять объектно-ориентированное мышление?

    AmberLEX
    @AmberLEX
    php/web-developer
    Дмитрий Елисеев
    www.elisdn.ru/oop-week
    Очень расжевывает и доступно объясняет.
    Есть много бесплатных видео, чтоб понять уровень.
    Это не очередной говно-курс как срубить бабок на перессказе документации.
    Посмотрите посты в блоге. Я правда курсы не проходил, но видео-материалы смотрел.
    Ответ написан
    Комментировать
  • Какой учебник по SQL почитать?

    AmberLEX
    @AmberLEX
    php/web-developer
    Ответ написан
    Комментировать
  • Kohana 3.1.4 проблема с роутингом загружается только стартовая страница?

    AmberLEX
    @AmberLEX
    php/web-developer
    Встречал хостинги где были такие настройки чтоб работало, попробуйте, по идее можно найти проблему на форуме хостинга или в техподдержке.

    # Rewrite all other URLs to index.php/URL
    RewriteRule .* index.php/$0 [PT]

    # hostinger.com.ua
    #RewriteRule ^(.*)$ index.php?/$1 [PT]

    # ukraine.com.ua
    #RewriteRule .* index.php?kohana_uri=$0 [PT,L,QSA]

    Или VirtualHost настройте, если есть доступ
    Ответ написан
    Комментировать
  • Есть ли достойное RBAC решение на Yii2?

    AmberLEX
    @AmberLEX
    php/web-developer
    Вот вышел урок "Аутентификация, авторизация и RBAC в Yii2"
    www.elisdn.ru/blog/79/authentication-and-rbac-on-yii2
    Ответ написан
    Комментировать
  • - - - - - -- --- - -?

    AmberLEX
    @AmberLEX
    php/web-developer
    Вот даже на русском немного есть
    allframeworks.ru/codeception

    Вот материалы по теме
    code.tutsplus.com/categories/testing/courses
    Ответ написан
    Комментировать
  • Почему не срабатывает выборка из 2-х таблиц?

    AmberLEX
    @AmberLEX
    php/web-developer
    Возможно нужно дописать что-то вроде
    $this->loadModel('AnimeShort')->contain(['AnimeLong']);

    Смотрите здесь book.cakephp.org/3.0/en/orm/associations.html#haso...
    Ответ написан
  • Kohana ORM связь has_many и подкатегории правильное отображение?

    AmberLEX
    @AmberLEX
    php/web-developer
    Можно так, мысль понятна, думаю, если и я правильно понял вопрос :)
    Можно добавить и id родителя, если че.
    Ну и методы в моделях, а не как тут :)

    c976f5a581724a03bab82df1345a37c8.png9d97e9049f3a47c0afd59503b59ee194.pngdb9bf4e79cab4b60a8b4e7ba1fc9edc0.png
    class Model_Category extends ORM
    {
    	protected $_table_name = 'categories';
    
    	protected $_has_many = array
    	(
    		'subs' => array(
    			'model' => 'Category',
    			'foreign_key' => 'parent_id',
    		),
    		'apps' => array(
    			'model' => 'App',
    			'through' => 'categories_apps',
    			'foreign_key' => 'category_id',
    			'far_key' => 'app_id',
    		),
    	);
    }

    class Model_App extends ORM
    {
    	protected $_table_name = 'apps';
    
    	protected $_has_many = array
    	(
    		'categories' => array(
    			'model' => 'Category',
    			'through' => 'categories_apps',
    			'foreign_key' => 'app_id',
    			'far_key' => 'category_id',
    		),
    	);
    }

    class Controller_Welcome extends Controller
    {
    	public function action_index()
    	{
    		$id = 1;
    
    		// Variant 1
    		$subs_ids = $this->get_subs_ids_v1($id);
    		$this->show_subs_ids($subs_ids);
    		$this->show_apps($subs_ids);
    
    		// Variant 2
    		$subs_ids = $this->get_subs_ids_v2($id);
    		$this->show_subs_ids($subs_ids);
    		$this->show_apps($subs_ids);
    	}
    
    	private function get_subs_ids_v1($id)
    	{
    		// --------
    		// Category
    		$category = ORM::factory('Category', $id);
    
    		if ( ! $category->loaded())
    			throw new HTTP_Exception_404;
    
    		echo 'Category: ' . $category->title . '<br/>';
    
    		// ------------------
    		// Sub-Categories ids
    		return $category
    			->subs
    			->find_all()
    			->as_array(NULL, 'id');
    	}
    
    	private function get_subs_ids_v2($id)
    	{
    		// ------------------
    		// Sub-Categories ids
    		return ORM::factory('Category')
    			->where('parent_id', '=', $id)
    			->find_all()
    			->as_array(NULL, 'id');
    	}
    
    	private function show_subs_ids($subs_ids)
    	{
    		echo '<pre>' . print_r($subs_ids, TRUE) . '</pre>';
    	}
    
    	private function show_apps($subs_ids)
    	{
    		// $subs_ids может быть пустым, нужна дополнительная проверка,
    		// чтобы where IN не выдало шибку
    		$apps = ORM::factory('App')
    			->join('categories_apps')
    			->on('categories_apps.app_id', '=', 'app.id')
    			->where('categories_apps.category_id', 'IN', $subs_ids)
    			->find_all();
    
    		foreach ($apps as $app)
    			echo 'App: ' . $app->title . '<br/>';
    	}
    }

    Category: cat-1
    
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
    )
    
    App: app-1
    App: app-2
    App: app-3
    App: app-4
    App: app-5
    App: app-6
    
    Array
    (
        [0] => 2
        [1] => 3
        [2] => 4
    )
    
    App: app-1
    App: app-2
    App: app-3
    App: app-4
    App: app-5
    App: app-6
    Ответ написан
    Комментировать
  • Какие есть хорошие материалы для для изучения современного PHP на серьёзном уровне?

    AmberLEX
    @AmberLEX
    php/web-developer
    Для коханы, наверное, нет такого, чтоб "выжимка" и все в одном месте, нужно искать по инету. На brotkin.ru посмотрите, там есть статьи с заголовками "Знаете ли вы?" именно по нюансам работы - несколько частей.
    Как вариант найти несколько готовых CMS подсмотреть. Там так чтоб особо нормальных - нет, но взять оттуда можно достаточно.
    На гите найти типа "skeleton-simple-start-my-app" и посмотреть как строят архитектуру для старта проекта. Например вот или вот
    Я не работал с Yii2, но думаю, туда смотреть нужно. Там в фреймворке считаю, больше или будет больше всего, чем у коханы по разным модулям разбросано всем вместе взятым, еще и разные версии, и пилить нужно обычно, в общем этим занимаются разрозненные люди (для себя есть постоянные проверенные модули), а в yii этим занимаются разработчики фреймворка. В Kohana 3.3 например до сих пор mysql_ вместо mysqli_ используют.
    А пишу код на кохана, там да - все просто и понятно ))
    Ответ написан
    Комментировать
  • Как перевести MySQL timestamp в секунды?

    AmberLEX
    @AmberLEX
    php/web-developer
    1. Если нужно в секундах, можете хранить в int(10) unsigned NULL (в стандартном дампе для модуля авторизации так и хранятся значения created и updated)
    2. Если использовать DB::expr, то поможет для ОРМ в случае UNIX_TIMESTAMP (примерно как тут)
    3. Посмотрите здесь - думаю найдете то, что нужно, я подробнее расписал для дат.
    Ответ написан
    Комментировать