George Leow
George Leow

Reputation: 2373

CakePHP: How to list only the Posts which have been posted by the user himself/herself (one user)

On this page, a user would see a list of links which he himself/herself has posted, not including the rests which were posted by others. I'm in the middle of writing the function in one of my models, e.g. news

I am trying to use the idea of a dashboard: http://nuts-and-bolts-of-cakephp.com/2008/12/16/how-to-build-a-dashboard-for-your-application-in-cakephp/

I created my dashboards controller as:

function index () {     
           $this->set('news', ClassRegistry::init('News')->showmy());
          }

// In my news::model I have a function called showmy()

function showmy() {
         $userid = $this->Session->read('Auth.User.id');
         $mynews = $this->News->find('all', array('conditions' => array('News.user_id' => '$userid')));
         $this->set('mynews', $mynews);      
    }   

//The error I get is as follow

Undefined property: News::$Session [APP\models\news.php, line 7]

Fatal error: Call to a member function read() on a non-object in C:\...\app\models\news.php on line 7

I know something is terribly wrong with the showmy function, can someone shed some light how do we write the function that only retrieves the posts by one user? or if the problems are minor, correct the function above?

Upvotes: 0

Views: 1810

Answers (2)

jakubplus
jakubplus

Reputation: 317

My approach seems to be more documentation-like:

Let say you have PostsController with Post Model. When you do index on posts it's fine, you query for all posts. But for one user, I think you mean single index action in PostsController like:

class Post extends AppModel {
public $belongsTo = 'User'; // This way you're telling cakephp that one user can have many posts (he's posts' author)
}

class PostsController extends AppController {
    public function viewByUser() {
        $id = $this->Auth->user('id');
        $posts = $this->Post->findAllById($id);

        $this->set('posts', $posts);
    }
}

And then, in your view, you build a table like for index action

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#magic-find-types

Upvotes: 0

RSK
RSK

Reputation: 17516

Try this

You can't use Session from model so passit from controller

function index () {     
         $userid = $this->Session->read('Auth.User.id');
           $this->set('news', ClassRegistry::init('News')->showmy($userid ));
          }


function showmy($userid) {

         return $this->find('all', array('conditions' => array('News.user_id' => $userid)));

    }   

Upvotes: 2

Related Questions