WordPress.org

Ready to get started?Download WordPress

Forums

WP MVC
Accessing fields other than foreign_keys in Join Tables (4 posts)

  1. Seth
    Member
    Posted 1 year ago #

    Is there any way to access other fields in join tables. For example I have a books model and an authors model with a join table matching the book_ISBN to the author_id and I also have an order column in the join table which ranks the authors if there are multiple authors for a single book.

    Heres a reference table example. You can see that there are 2 entries for the same book with 2 authors. one of the authors is ranked with a 1 in the order column denoting that they are the primary author for listing.

    Unsure if this can be accessed through setting something in the 'fields' option for the author model in the has_many_and_belongs_to array.

    book_ISBN | author_id | order
    ---------------------------
    1234 | 1 | 1
    1234 | 2 | 2
    5678 | 3 | 1

    Will I need to do a second query directly on that table to get that columns data and then append it into the $this->object variable in the after_find() method?

    http://wordpress.org/extend/plugins/wp-mvc/

  2. dodmax
    Member
    Posted 1 year ago #

    You can try to write your own function to query this list in your model and do some tweaking on the find function:

    For example in your Book model:

    public function get_book_list()
    {
       return $this->find(array(
          'additional_selects' => array('AuthorBook.rank'),
          'joins' => array('Author'),
       ));
    }

    I'm not sure about the alias given to the table, worst case print the SQL query first to make sure of it.

    You can customize your request even more if needed:

    $this->find(array(
       'selects' => array(...)
       'joins' => array(
              'table' => '...',
              'on' => 'Author.id = ...',
              'alias' => 'Author',
              'type' => 'LEFT JOIN'
          )
       'conditions' => array(...) //or sql string
    ));
  3. Seth
    Member
    Posted 1 year ago #

    Thanks! Ill give it a try tomorrow. These advanced options are the types of things that would be really helpful if they were included in the docs. I find that the documentation on the website only covers the most basic stuff.
    I didnt know of the extra options for the Join array. Should really help going forward now.

    Thanks Again.

  4. kevcpu
    Member
    Posted 1 year ago #

    I am trying this same logic with the paginate function and I am having an issue. I am trying to perform a join that would allow me to pull back events based upon a specific speaker. Here is my code:

    $this->params['join'] = array(
              'table' => '{prefix}events_speakers',
              'on' => 'E.id = event_id',
              'alias' => 'E');
    
    $this->params['conditions'] = array('is_public' => true, 'speaker_id' => 6);
    
    $collection = $this->model->paginate($this->params);

    When I run this query, I am not getting any results back. I am testing this using the Events_calendar example. I added this code to the Events_Controller.

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic