Search code examples
phpormredbean

(Redbean) Unable to access linked table values


I am testing out the Redbean ORM. I like how it works, less work for me :) I am using the redbean books example, from their website. I have been able to create new books with authors and titles, and display them to the page with no problem. I added another dimension to learn how to link pages to my books.

I am able to add an entry into the book table, as well as add an entry into the page table using the following code:

----------- dbmgmt.php ---------------------------------

function AddNewBook($FORMINFO){
   $newBook = R::dispense('book');
   $newBook->title = $FORMINFO['title'];
   $newBook->author = $FORMINFO['author']; 
   $newBook->create_date = R::isoDateTime();

   $newPage = R::dispense('page');
   $newPage->pagetext = $FORMINFO['pagetext'];
   $newBook->ownPage = $newPage; 

   $id = R::store($newBook);

   return R::load('book', $id);
}

Both tables show the proper entries (new ids and populated fields). However, I am having a hard time accessing the pagetext field from the page table. This is the code I have been using for that:

----------- dbmgmt.php ---------------------------------

function GetBooks($id){
  if($id == ""){
     return R::find('book');
  }
  else{
     return R::find('book','id = ?', array($id));
  }
}

----------- GetBooks.php ---------------------------------

 $id = "";
 if(isset($_GET['id'])){
   $id = $_GET['id'];
 }

 $books = GetBooks($id);
 $booklist = "";

 foreach($books as $book){
    $pagetext = "";

    foreach($book->ownPage as $page){
         $pagetext .= $page->pagetext;   //Errors with "Notice: Trying to get property of non-object"
    }

    $booklist .=  "<tr id='$book->id'><td><a class='linkEdit' href='edit.php?id=$book->id'><img src='http://cdn1.iconfinder.com/data/icons/ledicons/page_white_edit.png' /></a> <span class='book-title'>$book->title</span></td><td><span class='book-author'>$book->author</span></td><td><span class='page-text'>$pagetext</span></td></tr>";    
 }

 echo $booklist;
 ------------------------------------------------------------

When I print_r($book->ownPage), I don't even see the page entry that I can clearly see in the page table via phpmyadmin. I have tried many different ways of accessing the pagetext field via my script above, but can't get anywhere with it.

Any insight would be most welcome. Otherwise I will have to try a different, albeit bigger and more cumbersome, ORM.

Thanks in advance.


Solution

  • I am not 100% sure as I haven't encountered this problem yet myself, but I am almost positive, $book->ownPage needs to be an array:

    $newPage = R::dispense('page');
    $newPage->pagetext = $FORMINFO['pagetext'];
    $newBook->ownPage[] = $newPage; 
    
    $id = R::store($newBook);