• 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
    Ответ написан
    Комментировать
  • Сервер многопоточность и очередь задач на Java?

    @cthulhudx
    1) Модульность можно обеспечить с помощью OSGI
    2) Java Concurrency in Practice
    3) Напрашивается реализация паттерна "команда"
    4) json или бинарный формат
    Ответ написан
    Комментировать
  • Разделение пользователей и аднимистраторов на сайте по разным таблицам?

    @timathecue
    А если менеджер захочет сделать заказ или администратор - надо регистрироваться?
    В kohana при использовании модуля Auth все пользователи хранятся в users, роли - в roles, связи - roles_users. Соответственно если у пользователя будет роль admin, то это еще и администратор.
    Ответ написан
    9 комментариев
  • Разделение пользователей и аднимистраторов на сайте по разным таблицам?

    Клиент - отдельная сущность в интернет-магазине, никак не сравнимая по правам доступа с администраторами и тому подобными типами пользователей... Можно сказать что клиент - это структурная единица мини-CRM-системы, используемой для оформления заказов. Следовательно: мухи отдельно - котлеты отдельно! Был бы это форум - можно и подумать, а так...
    Ответ написан
    5 комментариев