<?php
class Controller_Activity extends Controller_Application
{
 public function action_index()
 {
  $friends = array();
  foreach ($this->current_user->friends as $f)
  {
   $friends[] = $f->friend_id;
  }
  $this->data['activities'] = Model_Activity::find()
          ->where('user_id', 'IN', $friends)
          ->order_by('created_at', 'desc')
          ->get();
  
  $this->template->title = 'Activity';
  $this->template->content = View::forge('activity/index', $this->data);
 }
}
$friends = array(); 
$result = Model_Friends::query()->select('friend_id')->where('user_id', '=', $this->current_user->id)->get();
foreach ($result as $f)
{
    $friends[] = $f->friend_id; 
}
which results in a slightly more optimal query.		
		Harro Verton wrote on Wednesday 3rd of October 2012:What I mean with eager loading is that when you ran the query to fetch $this->current_user, if you have included "->related('friends')" (or the same in array notation), a join is executed to fetch both the current_user and prepopulate the friends objects. If not, then the ORM will fire a "SELECT *" query as soon as you access a friends object, which means a second query. Only in this case a slight improvement is possible, because in terms of efficiency nothing beats retrieving the data using a join.
$this->current_user = Model_User::find($user_id);
It looks like you're new here. If you want to get involved, click one of these buttons!