Всем добрый день! Вынужден поднять данную тему ещё раз( К сожалению мне не обойтись без вашей помощи.
Суть в чём - я просто пытаюсь понять последовательность происходящих действий. В Joomla (а вернее в моём примере) всё как то сильно разбросано по файлам и не понятно откуда что вызывается.
Вот смотрите, как я писал ранее, вначале через AJAX инициируем вызов контроллера
jQuery.ajax({
        url:'index.php?option=com_lendr&controller=add&format=raw&tmpl=component',
        type:'POST',
        data:itemInfo,
        dataType:'JSON',
Кстати не понятно - Joomla достаточно указать имя файла контроллера? Потому что насколько мне известно по всем канонам, вначале указывается имя файла, а потом имя самой функции, которую нужно вызвать через AJAX.
Ну не суть.
Далее идёт файл контроллера 
controllers/add.phpclass LendrControllersAdd extends JControllerBase
{
  public function execute()
  {
    $app      = JFactory::getApplication();
    $return   = array("success"=>false);
    $modelName  = $app->input->get('model', 'Book');
    $view       = $app->input->get('view', 'Book');
    $layout     = $app->input->get('layout', '_entry');
    $item       = $app->input->get('item', 'book');
    $modelName  = 'LendrModels'.ucwords($modelName);
  	 $model = new $modelName();
   	if ( $row = $model->store() )
  	 {
  		 $return['success'] = true;
  		 $return['msg'] = JText::_('COM_LENDR_SAVE_SUCCESS');
     $return['html'] = LendrHelpersView::getHtml($view, $layout, $item, $row);
  	 }else{
  		 $return['msg'] = JText::_('COM_LENDR_SAVE_FAILURE');
  	 }
    
  	echo json_encode($return);
  }
}
Как подсказал ранее 
robert:
$data['table']. Скорее всего, в форме, откуда вы отправляете данные, есть скрытое поле с таким значением.
название таблицы с которой оперирует модель действительно передаётся через скрытое поле на моём 
виде.
Но вот что происходит дальше(в контроллере) не совсем понятно.
Например из вида в $data['table'] передаётся название таблицы "book". Хотя сама таблица в базе называется #__lender_books.
Далее есть файл модели 
models/book.phpclass LendrModelsBook extends LendrModelsDefault
{
  /**
  * Protected fields
  **/
  var $_book_id     = null;
  
  var $_user_id     = null;
  
  var $_library_id  = null;
  var $_pagination  = null;
  var $_total       = null;
  var $_published   = 1;
  var $_waitlist    = FALSE;
  var $_wishlist    = FALSE;
  function __construct()
  {
    $app = JFactory::getApplication();
    $this->_book_id = $app->input->get('id', null);
    
    parent::__construct();       
  }
 
  /**
  * Builds the query to be used by the book model
  * @return   object  Query object
  *
  *
  */
  protected function _buildQuery()
  {
    $db = JFactory::getDBO();
    $query = $db->getQuery(TRUE);
    $query->select('b.book_id, b.user_id, b.isbn, b.title, b.author, b.summary, b.pages, 
                    b.publish_date, b.lent, b.lent_date, b.due_date');
    $query->from('#__lendr_books as b');
    $query->select('w.waitlist_id, w.user_id as borrower_id');
    $query->leftjoin('#__lendr_waitlists as w on w.book_id = b.book_id AND w.fulfilled = 0');
    $query->select('l.name as borrower');
    $query->leftjoin('#__users as l on l.id = b.lent_uid');
    $query->select('u.name as waitlist_user');
    $query->leftjoin('#__users AS u on u.id = w.user_id');
    return $query;
  }
  public function getItem()
  {
    $book = parent::getItem();
    $reviewModel = new LendrModelsReview();
    $reviewModel->set('_book_id',$book->book_id);
    $book->reviews = $reviewModel->listItems();
    return $book;
  }
  /**
  * Builds the filter for the query
  * @param    object  Query object
  * @return   object  Query object
  *
  */
  protected function _buildWhere(&$query)
  {
    if(is_numeric($this->_book_id)) 
    {
      $query->where('b.book_id = ' . (int) $this->_book_id);
    }
    if(is_numeric($this->_user_id)) 
    {
      $query->where('b.user_id = ' . (int) $this->_user_id);
    }
    if(is_numeric($this->_library_id)) 
    {
      $query->where('b.library_id = ' . (int) $this->_library_id);
    }
    if($this->_waitlist)
    {
      $query->where('w.waitlist_id <> ""');
    }
    $query->where('b.published = ' . (int) $this->_published);
    return $query;
  }
  /**
  * Lend the book
  * @param    array   Data array of book
  * @return   object  The book object loaned
  */
  public function lend($data = null)
  {
    $data = isset($data)? $data : JRequest::get('post');
    if (isset($data['lend']) && $data['lend']==1)
    {
      $date = date("Y-m-d H:i:s");
      $data['lent'] = 1;
      $data['lent_date'] = $date;
      $data['lent_uid'] = $data['borrower_id'];
      $waitlistData = array('waitlist_id'=>$data['waitlist_id'], 'fulfilled' => 1, 'fulfilled_time' => $date, 'table' => 'Waitlist');
      $waitlistModel = new LendrModelsWaitlist();
      $waitlistModel->store($waitlistData);
    } else {
      $data['lent'] = 0;
      $data['lent_date'] = NULL;
      $data['lent_uid'] = NULL;
    }
    
    $row = parent::store($data);    
    
    return $row;
  }
  /**
  * Delete a book
  * @param int      ID of the book to delete
  * @return boolean True if successfully deleted
  */
  public function delete($id = null)
  {
    $app  = JFactory::getApplication();
    $id   = $id ? $id : $app->input->get('book_id');
    $book = JTable::getInstance('Book','Table');
    $book->load($id);
    $book->published = 0;
    if($book->store()) 
    {
      return true;
    } else {
      return false;
    }
  }
}
и ещё как оказалось есть файлы, как я понял, отвечающие за сами таблицы.
В данном случае файл 
tables/book.phpКОторый как я понял отвечает за операцию над той или иной таблицей.
class TableBook extends JTable
{                      
  /**
  * Constructor
  *
  * @param object Database connector object
  */
  function __construct( &$db ) {
    parent::__construct('#__lendr_books', 'book_id', $db);
  }
}
есть кстати ещё один файл 
models/default.php. Тоже не совсем понятно что он делает.
function __construct()
  {
    parent::__construct(); 
  }
  public function store($data=null)
  {    
    $data = $data ? $data : JRequest::get('post');
    $row = JTable::getInstance($data['table'],'Table');
    $date = date("Y-m-d H:i:s");
     // Bind the form fields to the table
    if (!$row->bind($data))
    {
        return false;
    }
    $row->modified = $date;
    if ( !$row->created )
    {
      $row->created = $date;
    }
    // Make sure the record is valid
    if (!$row->check())
    {
        return false;
    }
 
    if (!$row->store())
    {
        return false;
    }
    return $row;
  }
Я не прошу разжовывать для меня код и т.д.
Я прошу лишь помочь мне понять в какой последовательности и что вызывается. Оч рад за любую помощь, спасибо!